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的函数调用之间的区别是什么.
解决方法:
函数f2在函数f1的作用域内.它的名称仅在该函数内部有效,因为您在此函数中对其进行了定义.当您返回f2时,您所做的就是让程序的其余部分访问该函数的属性,而不是其名称.函数f1返回可打印88的内容,但不会将名称f2暴露给外部范围.
通过f1()()或action()间接调用f2是完全有效的,因为这些名称是在该外部范围中定义的.名称f2没有在外部范围中定义,因此称它为NameError.