You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 21:59:52