第六章:函数
定义函数
函数就像一台"自动售货机"——你投入原料(参数),它吐出结果(返回值)。把重复的代码封装成函数,可以让你的代码更整洁。
bash
# 基本函数定义
def greet(name):
"""向某人打招呼(这是文档字符串 docstring)"""
return f"你好,{name}!欢迎学习 Python!"
message = greet("小明")
print(message)
# 查看文档字符串
print(greet.__doc__)bash
你好,小明!欢迎学习 Python!
向某人打招呼(这是文档字符串 docstring)参数类型详解
bash
# 1. 位置参数
def add(a, b):
return a + b
print(f"10 + 20 = {add(10, 20)}")
# 2. 关键字参数(可以不按顺序)
def profile(name, age, city):
return f"{name},{age}岁,来自{city}"
print(profile(age=25, city="北京", name="小红"))
# 3. 默认参数
def power(base, exponent=2):
return base ** exponent
print(f"2的3次方 = {power(2, 3)}")
print(f"5的平方 = {power(5)}") # 使用默认值
# 4. 可变参数 *args(接收任意数量的位置参数,打包成元组)
def total(*args):
print(f" 收到的参数:{args}")
return sum(args)
print(f"总和 = {total(1, 2, 3, 4, 5)}")
# 5. 关键字可变参数 **kwargs(打包成字典)
def show_info(**kwargs):
for key, value in kwargs.items():
print(f" {key}: {value}")
show_info(name="小明", age=18, hobby="编程")bash
10 + 20 = 30
小红,25岁,来自北京
2的3次方 = 8
5的平方 = 25
收到的参数:(1, 2, 3, 4, 5)
总和 = 15
name: 小明
age: 18
hobby: 编程lambda 匿名函数
bash
# lambda 是一行的小函数
square = lambda x: x ** 2
print(f"3的平方 = {square(3)}")
# 常与 sorted、map、filter 等搭配使用
students = [("小明", 85), ("小红", 92), ("小刚", 78)]
# 按成绩排序
sorted_students = sorted(students, key=lambda s: s[1], reverse=True)
print(f"成绩排名:{sorted_students}")
# map:对每个元素应用函数
numbers = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x * 2, numbers))
print(f"翻倍:{doubled}")
# filter:筛选元素
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(f"偶数:{evens}")bash
3的平方 = 9
成绩排名:[('小红', 92), ('小明', 85), ('小刚', 78)]
翻倍:[2, 4, 6, 8, 10]
偶数:[2, 4]装饰器(Decorator)
装饰器就像给函数"穿衣服"——不改变函数本身,但给它增加额外功能(比如计时、日志、权限检查)。
bash
import time
# 定义一个计时装饰器
def timer(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
elapsed = time.time() - start
print(f" ⏱️ {func.__name__} 执行耗时:{elapsed:.4f}秒")
return result
return wrapper
# 使用装饰器:用 @ 语法
@timer
def slow_function(n):
"""一个故意变慢的函数"""
total = 0
for i in range(n):
total += i
return total
result = slow_function(1_000_000)
print(f"计算结果:{result}")bash
⏱️ slow_function 执行耗时:0.0512秒
计算结果:499999500000