求助关于def定义的问题!!!!!
tttt a= funX()之后,当我们调用a()的时候就是相当于funX()()了,这个能明白吧?然后为什么funX()()等于funY()呢?当然是因为funX()的返回值等于funY啦。我们定义一个函数的时候 比如 funX ,这样的是函数体,而加上括号,是调用这个函数。调用函数得到的是这个函数的返回值。也就是,函数执行了什么是函数内规定的东西,是它的步骤。而这个函数调用后的结果是它的返回值。
所以每次print(a())其实就是print(funY())了。这样每次直接调用funY,不调用funX,所以不会执行Y以外的x=5.而只会在之前的基础上执行x+=1. 这是函数闭包。
funX()返回的是一个函数名,也就是一个可执行函数,相当于将funY()函数重新起了一个小名为a
a=funX()时,执行一次funX()函数,也就是说执行一次 x=5 赋值,之后不在执行x=5赋值,因为之后的三行都没有在执行funX()函数
之后的上print执行的是a(),也就是funY()函数,没每执行一次,x的值就会加一,因此输出的分别是6 7 8
def funX():
x=5
def funY():
nonlocal x
x+=1
return x
return funY
print(funX()())
print(funX()())
print(funX()())
上面的这种写法,相当于每次都要执行funX函数,因此每次都会给x赋值为5,每次输出都是6
页:
[1]