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
函数之间的区别。
答案 0 :(得分:3)
函数os.path.join
是 local 到函数f2
的范围。它的名称仅在该函数内部有效,因为您在那里定义了它。当您返回f1
时,您所做的只是让程序的其余部分访问函数的属性,而不是其名称。函数f2
返回打印88但不会将名称f1
公开给外部范围的内容。
通过f2
或f2
间接调用f1()()
完全有效,因为这些名称是在该外部范围内定义的。名称action()
未在外部范围中定义,因此调用它是f2
。