关于Python嵌套函数namespace与scope理解的验证请求
Python 命名空间(Namespace)与作用域(Scope)的辨析与代码验证
之前专门调研了Python里命名空间和作用域的区别,看到一段特别清晰的核心定义:
当我们称x处于函数的namespace中,指其在函数内部本地定义;当称x处于函数的scope中,指其要么在该函数的namespace中,要么在该函数namespace嵌套的任一外部namespace中。
接下来咱们结合这段定义,逐一验证你对目标代码的判断是否正确:
目标代码
z=5 def f(): x=5 def g(): y=5 return y return g()
各判断的验证与纠正
判断a:x和g在f的namespace中
这个判断完全正确!x是在f函数内部定义的局部变量,g是f内部嵌套定义的函数,二者都是f本地创建的成员,自然属于f的命名空间。判断b:y在g的namespace中,同时属于g的局部scope
没问题!y是g内部专属定义的变量,属于g的命名空间;而g的局部作用域本身就包含自身命名空间内的所有成员,所以y肯定属于g的局部作用域。判断c:z和f存在于全局scope中
正确!z是最外层定义的全局变量,f是全局层面定义的函数,全局作用域涵盖了最顶层的命名空间,所以二者都属于全局作用域的范围。判断d:f的scope是g的父scope
这个表述不够准确哦!准确的说法是:f的命名空间是g的父命名空间。作用域是一个“可访问的命名空间集合”,g的作用域包含了自身的命名空间、f的命名空间以及全局命名空间,不能直接说某个函数的作用域是另一个的父作用域,应该描述为g的作用域包含f的命名空间(即g可以访问f内定义的变量和函数)。
内容的提问来源于stack exchange,提问作者Prashin Jeevaganth
相关产品推荐
相关产品推荐

