函数是Python编程的核心组成部分,它允许开发者将代码封装为可重复调用的模块,从而提高代码的可读性、复用性和可维护性。本文将系统讲解Python 3中函数的定义、参数传递、作用域及高阶用法,并辅以实例代码帮助理解。
一、函数的定义与调用
1. 基本语法
使用 def 关键字定义函数,后接函数名和参数列表:
def greet(name):
"""返回问候语(文档字符串)"""
return f"Hello, {name}!"
print(greet("Alice")) # 输出:Hello, Alice!
2. 函数调用
通过函数名加括号调用函数,传递所需参数:
result = greet("Bob")
print(result) # 输出:Hello, Bob!
二、函数参数与返回值
1. 参数类型
-
位置参数: 按顺序传递参数。
-
默认参数: 参数可指定默认值(默认值仅计算一次):
def power(base, exponent=2): return base ** exponent print(power(3)) # 9(使用默认指数2) print(power(2, 4)) # 16
-
可变参数: 接收任意数量的位置参数(*args)或关键字参数(**kwargs):
def sum_all(*numbers): return sum(numbers) print(sum_all(1, 2, 3)) # 6
2. 返回值
使用 return 返回结果,可返回多个值(实质为元组):
def min_max(numbers):
return min(numbers), max(numbers)
low, high = min_max([4, 2, 9, 7])
print(f"Min: {low}, Max: {high}") # Min: 2, Max: 9
三、变量作用域
-
局部变量: 函数内定义的变量,仅函数内有效。
-
全局变量: 函数外定义,需使用 global 声明修改:
count = 0 def increment(): global count count += 1 increment() print(count) # 1
四、匿名函数(Lambda)
适用于简单逻辑,语法为 lambda 参数: 表达式:
square = lambda x: x ** 2
print(square(5)) # 25
# 常用场景:排序
names = ["Alice", "Bob", "Charlie"]
names.sort(key=lambda s: len(s))
print(names) # ['Bob', 'Alice', 'Charlie']
五、高阶函数与装饰器
1. 高阶函数
函数可作为参数或返回值:
def apply(func, value):
return func(value)
print(apply(lambda x: x * 2, 10)) # 20
2. 装饰器(Decorator)
用于扩展函数功能,使用 @ 语法糖:
def logger(func):
def wrapper(*args, **kwargs):
print(f"调用函数:{func.__name__}")
return func(*args, **kwargs)
return wrapper
@logger
def add(a, b):
return a + b
print(add(3, 5)) # 输出:调用函数:add → 8
六、注意事项
-
避免可变默认参数: 默认值在定义时创建,可能导致意外行为。
# 错误示例 def append_to(element, lst=[]): lst.append(element) return lst # 正确做法:使用None替代 def append_to(element, lst=None): lst = lst or [] lst.append(element) return lst
-
作用域混淆: 在嵌套函数中修改外部变量需使用 nonlocal。
-
类型提示(Python 3.5+): 提高代码可读性:
def greeting(name: str) -> str: return f"Hello, {name}"
七、总结
函数是Python程序设计的基石,掌握其用法能大幅提升代码质量。从基础参数传递到高阶装饰器应用,理解函数的每个细节将助您编写更高效、灵活的代码。