用Python调用嵌套函数

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.

上一篇:手把手教你搭建LyncServer2013之发布Office Web App服务器(十二)


下一篇:c#-用于对象树的嵌套字符串表示形式的Superpower解析器