Python函数进阶详解,掌握装饰器、闭包与高阶函数
本文面向Python开发者,系统讲解Python函数进阶技巧。内容涵盖函数参数高级用法、闭包、装饰器、高阶函数、匿名函数(lambda)、递归函数及实战应用。通过实例讲解和分步操作,帮助读者快速掌握函数进阶技能,提高代码复用性和可维护性。
正文教程
一、函数参数高级用法
默认参数
def greet(name="Guest"):
print(f"Hello, {name}!")
greet() # 输出 Hello, Guest!
greet("Tom") # 输出 Hello, Tom!
可变参数
*args和**kwargs
def demo(*args, **kwargs):
print("args:", args)
print("kwargs:", kwargs)
demo(1, 2, 3, a=4, b=5)
技巧:适合接收不确定数量的参数
二、匿名函数(Lambda)
add = lambda x, y: x + y
print(add(3,5)) # 输出 8
技巧:用于函数式编程或作为参数传递
三、高阶函数
map
nums = [1,2,3,4]
squared = list(map(lambda x: x**2, nums))
print(squared)
filter
even_nums = list(filter(lambda x: x%2==0, nums))
print(even_nums)
reduce(需要导入
functools)
from functools import reduce
product = reduce(lambda x, y: x*y, nums)
print(product)
技巧:高阶函数可实现函数式编程
四、闭包(Closure)
def outer(x):
def inner(y):
return x + y
return inner
add_five = outer(5)
print(add_five(10)) # 输出 15
技巧:闭包可保存外部函数变量,实现数据封装
五、装饰器(Decorator)
def decorator(func):
def wrapper(*args, **kwargs):
print("函数开始执行")
result = func(*args, **kwargs)
print("函数执行结束")
return result
return wrapper
@decorator
def say_hello(name):
print(f"Hello, {name}!")
say_hello("Tom")
技巧:装饰器可增强函数功能,无需修改原函数
六、递归函数
def factorial(n):
if n == 1:
return 1
return n * factorial(n-1)
print(factorial(5)) # 输出 120
技巧:递归适合处理分治、树结构或阶乘等问题
七、实用技巧总结
熟练使用
*args、**kwargs提高函数灵活性结合Lambda与高阶函数简化列表、字典操作
使用闭包保存状态,避免全局变量
装饰器增强函数功能,实现统一日志、权限验证
递归与迭代结合,处理复杂算法问题