我正在学习Python与其他语言的良好背景.我的问题主要是学术问题,因为我知道我所要求的内容很少需要,绝对不是一个好的编程实践.
这是我要问的:
x = 'global scope' # global
def func():
x = 'local scope' # global x is now shadowed
print(global x) # is this somehow possible?
Run Code Online (Sandbox Code Playgroud)
尝试#1
def attempt1():
x = 'local scope' # shadowded
global x
print(x) # error
Run Code Online (Sandbox Code Playgroud)
这会导致错误:在全局声明之前将名称"x"分配给它.
尝试#2
def attempt2():
x = 'local scope' # shadowded
print(__main__.x) # error: __main__ not defined
Run Code Online (Sandbox Code Playgroud)
名称空间状态的Python文档表明#2(或类似的东西)应该是可能的.请参阅Python教程9.2
"从脚本文件中读取或交互式地从顶层调用解释器执行的语句被认为是名为__main__的模块的一部分,因此它们具有自己的全局命名空间."
但是,尝试__main__
从脚本或控制台访问会导致错误.此外,global属性__name__
指的是最外面的模块__builtins__
,但是它只包含内置变量,而不包含任何用户定义的全局变量.如果变量是在外部模块中进行的,那么已导入的模块可以使用__module_name__.variable
.
尝试globals():
x = 'global scope' # global
def func():
x = 'local scope' # global x is now shadowed
print(globals()['x']) # is this somehow possible?
func()
Run Code Online (Sandbox Code Playgroud)