萌新求助,关于python函数闭包的问题
# 闭包def FunX(x):
def FunY(y):
return x*y
return FunY
# 调用
i=FunX(8)(4)
print(i)
def Fun1():
x=5
def Fun2():
nonlocal x
x*=x
return x
return Fun2()
# nonlocal是为了修改x,x对于Fun2来说相当于全局变量
print(Fun1())
代码如上所示,
请教: 为什么在FunX()中调用FunY不能加括号,在Fun1()中调用Fun2()函数需要加括号,就是因为一个有参数一个没参数吗,为什么?有大佬可以教教我吗 不带括号是函数本身
带括号是调用函数
在这里FunY不加括号确实是为了传参 逃兵 发表于 2021-7-28 19:49
不带括号是函数本身
带括号是调用函数
大佬,函数本身是指函数返回值的结果吗,为什么加了括号就会报错呢 Goland 发表于 2021-7-29 16:41
大佬,函数本身是指函数返回值的结果吗,为什么加了括号就会报错呢
相反,加了括号才是返回函数的结果
i=FunX(8)(4)
print(i)
在上面这段代码中,FunX(8) 返回的是FunY (这就是我说的函数本身)
他将参数(8)带入了FunY,中此时FunY相当于
def FunY(y):
return 8*y
而调用带参数的FunY则需要FunY(4) (加上括号才是调用)
FunX(8)→ FunY
FunX(8)(4) → FunY(4)
你可以这么理解函数加不加括号
不带括号的函数表明的是身份(比如说厨师)
带括号的函数表明的是这个身份做的事情(炒菜)
括号内的参数相当于食材(厨师炒萝卜) 逃兵 发表于 2021-7-29 17:01
相反,加了括号才是返回函数的结果
大佬牛逼,我懂了
页:
[1]