python中的函数调用期间名称空间是如何工作的?

python中的函数调用期间名称空间是如何工作的?,python,function,namespaces,Python,Function,Namespaces,其描述如下— 函数定义是一个可执行语句。它的执行将当前本地命名空间中的函数名绑定到函数对象(围绕函数的可执行代码的包装器)。此函数对象包含对当前全局命名空间的引用,作为调用函数时要使用的全局命名空间 def func1(): def func2(): print("HELLO") func1() func2() NameError: name 'func2' is not defined 执行func1后,将执行func2的定义,并将其函数对象引用到全局命名空

其描述如下—


函数定义是一个可执行语句。它的执行将当前本地命名空间中的函数名绑定到函数对象(围绕函数的可执行代码的包装器)。此函数对象包含对当前全局命名空间的引用,作为调用函数时要使用的全局命名空间

def func1():
    def func2():
        print("HELLO")    
func1()
func2()

NameError: name 'func2' is not defined
执行func1后,将执行func2的定义,并将其函数对象引用到全局命名空间。现在,即使在全局命名空间中存在func2的函数对象,为什么我不能从func1的主体外部调用func2


我是编程新手,我这样做只是为了更好地掌握函数,如果我有任何误解,请解释在函数调用期间名称空间是如何工作的。

“此函数对象包含对当前全局名称空间的引用”并不意味着“将函数的名称添加到当前全局名称空间”。我认为你是在把事情向后解释
func2
可以访问全局值,但全局命名空间无法访问
func2
。谢谢,我明白你的意思了。假设我们从func2的主体内部对func1进行函数调用,这是完全有效的,但是当我们在func2的本地命名空间中没有func1名称时,这怎么可能,因为在执行定义期间func1绑定在func1的本地命名空间中。
func1
不绑定在
func1
的本地命名空间中。它绑定在全局命名空间中。由于
func2
可以访问全局命名空间,因此它可以访问
func1
。func2的边界是否发生在func2的本地命名空间中?
func2
仅存在于
func1
的本地命名空间中。