在Python中,函数是一段可重复使用的代码块,用于执行特定任务。它通过名称调用,可以接收输入参数并返回结果。以下是Python函数的详细讲解:
一、函数的定义与调用
1. 基本语法
使用 def
关键字定义函数:
def 函数名(参数列表):
"""文档字符串(可选)"""
代码块
return 返回值
2. 示例
def greet(name):
"""向用户问好"""
print(f"Hello, {name}!")
greet("Alice") # 输出:Hello, Alice!
二、参数类型
1. 位置参数(Positional Arguments)
参数按顺序传递:
def add(a, b):
return a + b
print(add(3, 5)) # 输出:8
2. 默认参数(Default Arguments)
为参数指定默认值:
def power(base, exponent=2):
return base ** exponent
print(power(3)) # 输出9(3^2)
print(power(3, 3)) # 输出27(3^3)
3. 可变参数(*args 和 **kwargs)
*args
:接收任意数量的位置参数(打包为元组)**kwargs
:接收任意数量的关键字参数(打包为字典)
def print_args(*args, **kwargs):
print("位置参数:", args)
print("关键字参数:", kwargs)
print_args(1, 2, name="Alice", age=25)
# 输出:
# 位置参数: (1, 2)
# 关键字参数: {'name': 'Alice', 'age': 25}
4. 强制关键字参数(Python 3+)
使用 *
分隔符强制后续参数为关键字参数:
def person_info(name, *, age, city):
print(f"{name}, {age}岁,来自{city}")
person_info("Bob", age=30, city="北京") # 正确
person_info("Bob", 30, "北京") # 报错
三、返回值
- 使用
return
返回值,可返回多个值(实际返回元组) - 没有
return
或return
后无值则返回None
def min_max(numbers):
return min(numbers), max(numbers)
result = min_max([3, 1, 4])
print(result) # 输出 (1, 4)
四、变量作用域
- 局部变量:函数内定义的变量(仅在函数内有效)
- 全局变量:函数外定义的变量(通过
global
关键字在函数内修改)
x = 10 # 全局变量
def modify():
global x
x = 20
y = 5 # 局部变量
modify()
print(x) # 输出20
print(y) # 报错:y未定义
五、Lambda 函数
匿名函数,适合简单操作:
square = lambda x: x ** 2
print(square(5)) # 输出25
# 常用于排序等场景
points = [(1, 2), (3, 1), (2, 5)]
points.sort(key=lambda p: p[1]) # 按第二个元素排序
六、高级特性
1. 递归函数
函数调用自身:
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
print(factorial(5)) # 输出120
2. 闭包(Closure)
函数内部定义函数,并捕获外部变量:
def make_adder(x):
def adder(y):
return x + y
return adder
add5 = make_adder(5)
print(add5(3)) # 输出8
3. 装饰器(Decorator)
修改其他函数功能的工具:
def timer(func):
def wrapper(*args, **kwargs):
import time
start = time.time()
result = func(*args, **kwargs)
print(f"耗时:{time.time()-start:.2f}秒")
return result
return wrapper
@timer
def long_task():
import time
time.sleep(2)
long_task() # 输出:耗时:2.00秒
七、错误处理
在函数中处理异常:
def divide(a, b):
try:
return a / b
except ZeroDivisionError:
return "除数不能为0"
print(divide(10, 2)) # 输出5.0
print(divide(10, 0)) # 输出"除数不能为0"
八、文档字符串(Docstring)
使用三引号编写函数说明:
def add(a, b):
"""返回两个数的和
Args:
a (int/float): 第一个数
b (int/float): 第二个数
Returns:
int/float: a和b的和
"""
return a + b
help(add) # 查看文档
总结
Python函数的特点:
- 提高代码复用性
- 模块化编程
- 支持多种参数传递方式
- 支持高阶函数和函数式编程
- 通过装饰器灵活扩展功能
通过合理使用函数,可以让代码更简洁、更易维护。