关于闭包的问题-烧脑的逻辑挑战


代码如下:

def adder(x):
    def wrapper(y):
        return x + y
    return wrapper

adder5 = adder(5)
# 输出 15
adder5(10)
# 输出 11
adder5(6)

如上,我看不懂 adder5,这不是变量么,adder5(10)又是怎么回事?这个函数写法也太怪了?另外,程序怎么判断5是x,10是y的?

  • 6 条回复 | 5 人参与
  • 看不懂,懂了说一下

  • adder函数的返回值是wrapper,不是wrapper(),所以adder5的值不是变量,是一个函数。 于是adder5这个函数就成了这样:

    def adder5(y):
        return 5 + y
    

    怎么判断5是x,10是y就自然不用解释了吧。

  • def adder(x):
        def wrapper(y):
            return x + y
        return wrapper
    
    adder5 = adder(5)
    print(adder5)  
    

    输出<function wrapper at 0x10fcaf0c8>,说明adder5是个函数对象,然后:

    adder5(10)
    

    这里不用说了吧,调用函数adder5(10),传入的参数是10,return 5 + 10 ,所以结果是15,后面同一道理

  • jkxruby # 4

    @itsneo1990 懂了,棒棒~

  • jkxruby # 5

    @JmsAllen 🙏谢谢~

  • def adder(x): 返回一个函数名

    adder5 = adder(5) adder(5) 属于x =5 , adder5是个函数!!!

    adder5(10) 就是y=10,就是adder(5)(10)

    • 其实总体就是一个装饰器的逻辑。
添加一条新回复
登录 或者 注册 后发表回复