Python装饰器疑问:wrapper函数如何识别arg1和arg2参数
关于wrapper函数识别参数的解释
首先得搞懂装饰器的本质逻辑:
- 用
@outer_function装饰cities函数时,Python会自动把cities作为参数传给outer_function,然后outer_function返回内部定义的wrapper函数——这时候原来的cities变量已经被替换成了wrapper函数。
当你执行cities("Nairobi", "Accra")时,实际调用的是wrapper("Nairobi", "Accra"):
- 传入的两个字符串实参
"Nairobi"和"Accra"会直接匹配wrapper的形参arg1和arg2,和普通函数传参的逻辑完全一致。 - 之后
wrapper里执行的function(arg1, arg2),其实是调用最初定义的cities函数,把arg1和arg2传递给它的形参city_one和city_two。
如果去掉装饰器语法,用等价写法展示,逻辑会更直观:
def outer_function(function): def wrapper(arg1, arg2): print("My arguments are: {0}, {1}".format(arg1,arg2)) function(arg1, arg2) return wrapper def cities(city_one, city_two): print("Cities I love are {0} and {1}".format(city_one, city_two)) # 装饰器语法的等价手动操作 cities = outer_function(cities) # 此时调用cities,本质是调用wrapper cities("Nairobi", "Accra")
内容的提问来源于stack exchange,提问作者Qaiser Muhammad
相关产品推荐
相关产品推荐

