在Python中,def是定义函数的核心关键字,其基本语法歼纳规则如下:
def function_name(parameters): """docstring""" # 文档字符串(可选) # 函数体 return [expression] # 返回值(可选)1. 核心语法要素function_name:函数名需遵循命名规范(小写字母+下划线,如calculate_sum),避免与内置函数冲突。
parameters:参数列表可为空或包含多种类型参数:
无参数:def greet():
单参数:def square(x):
多参数:def add(a, b):
默认参数:def greet_with_name(name="Guest"):(默认参数需放在非默认参数后)
可变参数:def sum_all(*args):(接收任意数量位置参数)
关键字可变参数:def print_info(kwargs):(接收任意数量关键字参数)
docstring:用三引号包裹的字符串,描述函数功能、参数和返回值,清埋可通过__doc__属性访问。
return:可选语句,用于返回结果。若省略,函数默认返回None。
2. 参数规则与注意事项- 顺序要求:位置参数 → 默认参数 → *args → 关键字参数 → kwargs。def example(a, b=2, *args, c=3, kwargs): # 正确顺序 pass
- 默认参数陷阱:默认参数在函数定义时初始化,若为可变对象(如列表),可能引发意外行为。def append_item(item, lst=[]): # 错误示例:lst默认共享同一列表 lst.append(item) return lst修正方法:使用None作为默认值,在函数内初始化。def append_item(item, lst=None): if lst is None: lst = [] lst.append(item) return lst
3. 函数定义最佳实践- 添加文档字符串:提高代码可读性,便于维护。def calculate_area(radius): """计算圆的面积。 Args: radius (float): 圆的半径。 Returns: float: 圆的面积(πr²)。 """ return 3.14 * radius 2
- 单一职责原则:每个函数仅完成一个任务,长度控制在合理范围内(通常不超过50行)。
- 类型提示(Python 3.5+):增强代码可读性,支持静态类型检查。def greet(name: str) -> str: return f"Hello, {name}!"
4. 高级用法- 闭答改蚂包:内层函数可访问外层函数的变量,实现状态记忆。def outer(x): def inner(y): return x + y return inneradd_5 = outer(5)print(add_5(3)) # 输出: 8
- 装饰器:动态修改函数行为,常用于日志、缓存等场景。def logger(func): def wrapper(*args, kwargs): print(f"调用函数: {func.__name__}") return func(*args, kwargs) return wrapper@loggerdef greet(name): print(f"Hello, {name}!")greet("Alice") # 输出: 调用函数: greet → Hello, Alice!
5. 常见错误与调试- 参数数量不匹配:调用时参数过多或过少会引发TypeError。def add(a, b): return a + badd(1) # TypeError: add() missing 1 required positional argument
- 变量作用域混淆:内层函数修改外层变量需使用nonlocal关键字。def counter(): count = 0 def increment(): nonlocal count # 声明count为外层变量 count += 1 return count return incrementc = counter()print(c()) # 输出: 1
总结def是Python函数定义的核心,支持灵活的参数传递(位置、默认、可变参数)和高级特性(闭包、装饰器)。遵循命名规范、参数顺序和单一职责原则,可编写出清晰、可维护的代码。通过文档字符串和类型提示,能进一步提升代码质量。