装饰器
- 前言
- 1. 装饰器的定义
- 2. 装饰器的应用
- 3. 装饰器的语法
- 4. func(*args, **kwargs)
前言
装饰器是Python中一种强大的函数或类修饰机制,用于在不修改原始函数或类代码的情况下,对其进行功能扩展或修改
。装饰器基于函数式编程
的概念,通过将函数作为参数传递给另一个函数,并返回一个新的函数来实现。
下面是关于装饰器的介绍和示例:
1. 装饰器的定义
装饰器是一个函数,它接受一个函数作为输入,并返回一个新的函数作为输出。装饰器可以在不修改原始函数的情况下,为其添加额外的功能或修改其行为。(感觉像java中的面向切面编程~)
2. 装饰器的应用
装饰器常用于以下场景:
- 添加日志记录
- 计时统计
- 输入验证和修正
- 缓存结果
- 权限验证
- 错误处理
3. 装饰器的语法
装饰器使用@
符号紧跟在函数定义的上方,表示将函数装饰为另一个函数。装饰器函数可以接受任意数量的参数,并返回一个新的函数。 在示例中,decorator
函数是一个装饰器函数,它接受一个函数作为参数并返回一个新的函数wrapper
。wrapper
函数在调用原始函数之前和之后
执行一些操作,然后调用原始函数并返回其结果。通过在原始函数上方使用@decorator
语法,将原始函数装饰为经过装饰器修饰的新函数。
示例:
def decorator(func):def wrapper(*args, **kwargs):# 在调用原始函数之前执行的操作print("执行装饰器前操作")# 调用原始函数result = func(*args, **kwargs)# 在调用原始函数之后执行的操作print("执行装饰器后操作")# 返回原始函数的结果return resultreturn wrapper# 应用装饰器
@decorator
def my_function():print("原始函数")# 调用装饰后的函数
my_function()
运行以上示例,将会输出:
执行装饰器前操作
原始函数
执行装饰器后操作
装饰器是Python中强大且常用的特性,它可以轻松地扩展和修改函数的功能,同时提高了代码的可重用性和可读性。在实际开发中,装饰器常用于切面编程和元编程,为代码添加横切关注点和动态功能。
4. func(*args, **kwargs)
func(*args, **kwargs)
是一种在函数调用时传递可变数量参数
的方式,其中 args
和 kwargs
是两种常用的参数形式。
-
*args
表示将参数作为一个元组(tuple)
传递给函数。它允许你传递任意数量的位置参数给函数,这些参数会被打包成一个元组传递给函数内部。函数内部可以使用args
来访问这个元组,并对其中的参数进行操作。 -
**kwargs
表示将参数作为一个字典(dict)
传递给函数。它允许你传递任意数量的关键字参数给函数,这些参数会被打包成一个字典传递给函数内部。函数内部可以使用kwargs
来访问这个字典,并对其中的参数进行操作。
下面示例来说明 func(*args, **kwargs)
的使用:
def example_func(*args, **kwargs):print("位置参数:")for arg in args:print(arg)print("关键字参数:")for key, value in kwargs.items():print(key, value)# 传递位置参数和关键字参数
example_func(1, 2, 3, name="John", age=25)
运行以上示例,将会输出:
位置参数:
1
2
3
关键字参数:
name John
age 25
在示例中,example_func
函数使用了 *args
和 **kwargs
来接受任意数量的位置参数和关键字参数。通过调用 example_func(1, 2, 3, name="John", age=25)
,将 1、2 和 3 作为位置参数传递,而 name 和 age 则作为关键字参数传递。函数内部可以使用 args
和 kwargs
来访问这些参数,并对它们进行操作。这种方式使得函数能够处理不确定数量的参数,使函数的使用更加灵活和通用。