tame47 发表于 2020-3-22 10:00:02

20课闭包,什么时候需要()

本帖最后由 tame47 于 2020-3-22 10:06 编辑

小甲鱼在课上举的例子。第一个例子,如果在最后的FunY后加()就会报错。第二个例子,不加()反而无法计算出结果。这是为什么,两个例子有什么不同?谢谢。

>>> def FunX(x):
        def FunY(y):
                return x * y
        return FunY() #这里加了()之后就会报错

>>> FunX(5)(6)
Traceback (most recent call last):
File "<pyshell#54>", line 1, in <module>
    FunX(5)(6)
File "<pyshell#53>", line 4, in FunX
    return FunY() #这里加了()之后就会报错
TypeError: FunY() missing 1 required positional argument: 'y'

>>> def Fun1(): #这是第二个例子
        x = 5
        def Fun2():
                nonlocal x
                x *= x
                return x
        return Fun2 #这里没有()就会报错

>>> Fun1()
<function Fun1.<locals>.Fun2 at 0x03FBBF10>

老冰棍e 发表于 2020-3-22 10:13:00

我也是新学,个人理解如果加了括号返回的就是FunY的函数值,但是并没有给y赋值所以会报错
而不加括号返回的是函数本身
我个人感觉是这个意思

qiuyouzhi 发表于 2020-3-22 10:19:24

本帖最后由 qiuyouzhi 于 2020-3-22 10:45 编辑

lz表达能力。。。
第一个是因为没有参数,和括号没关系
第二个也没有报错,是返回的函数对象,
就和这样调用函数一样:
print
返回的就是一个函数对象。
页: [1]
查看完整版本: 20课闭包,什么时候需要()