首页 > 试题广场 >

当一个嵌套函数在其外部区域引用了一个值时,该嵌套函数就是一个

[单选题]
当一个嵌套函数在其外部区域引用了一个值时,该嵌套函数就是一个闭包,以下代码输出值为:
def adder(x):
    def wrapper(y):
        return x + y
    return wrapper
adder5 = adder(5)
print(adder5(adder5(6)))

  • 10
  • 12
  • 14
  • 16
adder(5) #返回了 wrapper ,且x=5 
adder5 = adder(5) #    adder5是对wrapper的引用   此时x等于5
adder5(6) # 相当于 wrapper(6)  = 5+6=11 所以 adder5(6)  =11 ,同理adder5(7)=12
adder5(adder5(6)) # = adder5(11) =  wrapper(11) =5+11=16 



发表于 2019-07-04 00:41:28 回复(4)
闭包:如果一个函数内部又定义了一个函数,就把外部的函数称为外函数,内部的函数称为内函数。如果内函数引用了外函数的变量,而外函数返回内函数(引用),就把这种形式称之为 闭包。并且当外函数结束时会将变量绑定给内函数。
adder(5) = wrapper(x=5, y)
adder5 = wrapper(x=5, y)
adder5(6) = wrapper(x=5, 6) = 5 + 6 = 11
adder5(adder5(6)) = adder(11) = wrapper (x =5, 11) = 5 + 11 = 16
发表于 2019-12-20 09:37:16 回复(3)

闭包就是:

1.一个函数(外函数)内部定义了一个函数(内函数)

2.内函数调用了外函数的变量

3.并且外函数的返回值是内函数的引用

第一个adder5=adder(5)结束后,x=5,adder返回值为wrapper

adder5(6),此时wrapper(6),所以值为11,x为5

adder5(adder5(6)),同理,11+5=16

发表于 2019-11-03 21:51:52 回复(0)
# 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
发表于 2020-11-05 10:15:48 回复(2)

闭包,指有权访问另一个函数作用域中变量的函数。通俗讲闭包是一种特殊的对象,在外部函数调用后(外部函数的变量应该被销毁,因为已经调用了),但闭包的存在,使我们仍可以访问外部函数的变量对象。


发表于 2019-09-06 17:28:45 回复(0)
adder5 = adder(5)
传入x的值
x=5
adder5 = def wrapper(y):
                   return x + y
adder5(6)
传入y的值
y=6
def wrapper(6):
    return 5 + 6
adder5 = 11
adder5(11)
def wrapper(11):
    return 5+11

发表于 2019-11-09 17:11:15 回复(0)

这道题考查的是闭包,外部函数确定了x的值为5,内部函数的值为6,所以第一次计算结果为11,第二次计算,还是在x为5的前提下,需要在11的基础上再加5


发表于 2019-08-29 16:58:07 回复(0)
闭包:如果一个函数内部又定义了一个函数,就把外部的函数称为外函数,内部的函数称为内函数。如果内函数引用了外函数的变量,而外函数返回内函数(引用),就把这种形式称之为 闭包。并且当外函数结束时会将变量绑定给内函数。
adder(5) = wrapper(x=5, y)
adder5 = wrapper(x=5, y)
adder5(6) = wrapper(x=5, 6) = 5 + 6 = 11
adder5(adder5(6)) = adder(11) = wrapper (x =5, 11) = 5 + 11 = 16
发表于 2021-09-14 22:13:33 回复(0)
闭包:如果一个函数内部又定义了一个函数,就把外部的函数称为外函数,内部的函数称为内函数。如果内函数引用了外函数的变量,而外函数返回内函数(引用),就把这种形式称之为 闭包。并且当外函数结束时会将变量绑定给内函数。
adder(5) = wrapper(x=5, y)
adder5 = wrapper(x=5, y)
adder5(6) = wrapper(x=5, 6) = 5 + 6 = 11
adder5(adder5(6)) = adder(11) = wrapper (x =5, 11) = 5 + 11 = 16
发表于 2021-05-26 15:49:06 回复(0)
这个函数可以等价于这样,addre5(6)其实就是adder(5)(6),结果就是11,而adder5(adder5(6))等价于adder(5)(11)答案也就是16
发表于 2020-03-02 11:01:14 回复(0)

闭包就是:

1.一个函数(外函数)内部定义了一个函数(内函数)

2.内函数调用了外函数的变量

3.并且外函数的返回值是内函数的引用
adder(5) = wrapper(x=5, y)
adder5 = wrapper(x=5, y)
adder5(6) = wrapper(x=5, 6) = 5 + 6 = 11
adder5(adder5(6)) = adder(11) = wrapper (x =5, 11) = 5 + 11 = 16

发表于 2022-03-07 21:12:34 回复(0)
这里首先用adder5给函数adder(5)实类化,则x = 5,然后print(adder5())就是输入return后面的wrapper,这里wrapper = 5+y。然后adder5(6)则adder5 (5+6=11),则wrapper=5+11=16
发表于 2023-01-06 16:04:51 回复(0)
我是这样理解的:
adder5(6)=adder(5)(6),相当于x=5,y=6,故adder5(6)=11
同理,adder5(adder5(6))=adder5(11)=adder(5)(11),相当于x=5,y=11,故adder(5)(11)=16,也就是adder5(adder5(6))=16

发表于 2022-08-29 21:51:58 回复(0)

下面是代码的执行步骤和输出:

  1. adder(5)被调用,它返回了一个函数wrapper,其中x被设置为5。现在,adder5是一个函数,它可以接受一个参数y并返回5 + y。

  2. adder5(6)被调用,其中y被设置为6。这会计算5 + 6,结果为11。

  3. 接着,adder5(11)被调用,其中y被设置为11。这会再次计算5 + 11,结果为16。

发表于 2023-10-16 21:15:57 回复(0)
返回闭包时要牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。如果一定要引用循环变量,方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变。
发表于 2023-08-30 20:29:38 回复(0)
# 闭包:如果一个函数内部又定一个函数,就把外部的函数叫做外函数,内部函数叫做内函数,如果内函数引用了外部函数的变量, 而且外部函数返回内部函数(引用),就把这种形式称之为闭包。并且当外函数结束时将变量绑定给内函数
# adder(5):返回值为wrapper函数, 引用 x = 5
# adder5(6)adder5 = wrapper函数,参数为6,引用 x=5 wrapper函数运行返回结果x + y = 5 + 6 wrapper 返回结果=11
# adder5(adder5(6))=adder5(11) 引用 x=5, wrapper函数的参数为11,返回wrapper函数运行的结果,x+y = 5+11 = 16
# 最后结果为16
编辑于 2023-07-18 16:38:21 回复(0)
adder5=adder(5),调用了adder的函数,返回值是return wrapper,同时wrapper函数内部变为 return 5+y,所以adder5(6)的时候是调用的adder5=adder(5)的返回值return wrapper,wrapper函数接收的是y=6,返回值就是5+6=11
发表于 2023-03-04 14:17:50 回复(0)
adder5=adder(5)就相当于adder5里存放的是wrapper的内存地址, adder(5)此时x就等于5 adder5(6)就相当于wrapper(6) 此时return x+y 就等于return 11 adder5(adder5(6))就相当于adder5(wrapper(11)) wrapper (11)带入函数,return 5+11 再到wrapper返回。 而adder5就等价于wrapper,函数里最后把wrapper返回,注意,函数里返回的是对象。并没有加括号,加了括号才是调用。 adder5(adder5(6)) 就等于wrapper(wrapper(11)) 括号里面的wrapper(11)最后return 5+11 再把wrapper返回 括号外面wrapper()就相当于调用,所以最后结果等于16
发表于 2022-11-07 11:17:12 回复(0)
adder5 = adder(5)的代码相当于:
def wrapper(y):
    return 5 + y


发表于 2022-07-24 16:38:22 回复(0)
wrapper=adder(x) wrapper(y)=x+y adder(x)(y)=x+y adder5=adder(5) adder5(adder5(6)) =adder5(adder(5)(6)) =adder5(5+6) =adder(5)(11) =5+11 =16
发表于 2022-06-03 14:08:04 回复(0)