嵌套函数在Python中调用

时间:2018-01-13 04:23:45

标签: python function nested

def f1(): 
    X = 88
    def f2(): 
        print(X)
    return f2
action = f1() 
action()

由于f1正在返回f2所以当我将f2称为(f1())()时似乎很好。

但是当我直接将f2称为f2()时,它会给出错误。

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'f2' is not defined

有人可以解释使用上述两种方式调用f2函数之间的区别。

1 个答案:

答案 0 :(得分:3)

函数os.path.join local 到函数f2的范围。它的名称仅在该函数内部有效,因为您在那里定义了它。当您返回f1时,您所做的只是让程序的其余部分访问函数的属性,而不是其名称。函数f2返回打印88但不会将名称f1公开给外部范围的内容。

通过f2f2间接调用f1()()完全有效,因为这些名称是在该外部范围内定义的。名称action()未在外部范围中定义,因此调用它是f2