Goland 发表于 2021-7-28 19:46:28

萌新求助,关于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()函数需要加括号,就是因为一个有参数一个没参数吗,为什么?有大佬可以教教我吗

逃兵 发表于 2021-7-28 19:49:27

不带括号是函数本身
带括号是调用函数

在这里FunY不加括号确实是为了传参

Goland 发表于 2021-7-29 16:41:39

逃兵 发表于 2021-7-28 19:49
不带括号是函数本身
带括号是调用函数



大佬,函数本身是指函数返回值的结果吗,为什么加了括号就会报错呢

逃兵 发表于 2021-7-29 17:01:17

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)

你可以这么理解函数加不加括号

不带括号的函数表明的是身份(比如说厨师)

带括号的函数表明的是这个身份做的事情(炒菜)

括号内的参数相当于食材(厨师炒萝卜)

Goland 发表于 2021-7-29 19:19:08

逃兵 发表于 2021-7-29 17:01
相反,加了括号才是返回函数的结果




大佬牛逼,我懂了
页: [1]
查看完整版本: 萌新求助,关于python函数闭包的问题