def adder(x): def wrapper(y): return x + y return wrapper adder5 = adder(5) print(adder5(adder5(6)))
10
12
14
16
闭包就是:
1.一个函数(外函数)内部定义了一个函数(内函数)
2.内函数调用了外函数的变量
3.并且外函数的返回值是内函数的引用
第一个adder5=adder(5)结束后,x=5,adder返回值为wrapper
adder5(6),此时wrapper(6),所以值为11,x为5
adder5(adder5(6)),同理,11+5=16
# 1.得出adder5的结果: adder5 = adder(5) ---> x=5, wrapper # 2.由adder5得出adder5(adder5(6))的结果: adder5(adder5(6)) ---> x=5,wrapper(adder5(6)) ---> x=5,wrapper(x=5,wrapper(6)) ---> x=5,wrapper(11) ---> 5 + 11 = 16
闭包,指有权访问另一个函数作用域中变量的函数。通俗讲闭包是一种特殊的对象,在外部函数调用后(外部函数的变量应该被销毁,因为已经调用了),但闭包的存在,使我们仍可以访问外部函数的变量对象。
这道题考查的是闭包,外部函数确定了x的值为5,内部函数的值为6,所以第一次计算结果为11,第二次计算,还是在x为5的前提下,需要在11的基础上再加5
下面是代码的执行步骤和输出:
adder(5)被调用,它返回了一个函数wrapper,其中x被设置为5。现在,adder5是一个函数,它可以接受一个参数y并返回5 + y。
adder5(6)被调用,其中y被设置为6。这会计算5 + 6,结果为11。
接着,adder5(11)被调用,其中y被设置为11。这会再次计算5 + 11,结果为16。
def wrapper(y): return 5 + y
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题