我想定义一个Python函数: 1.检查变量是否已存在。 2.如果没有,将其创建为全局变量(因为我想在函数外部使用它)。
def foo():
try:
x
except NameError:
global x
x = 1
else:
pass
foo()
print(x)
然后出现错误:
SyntaxError:在全局声明之前使用名称'x'
如何解决这个问题?谢谢:))
答案 0 :(得分:1)
在函数顶部声明一个变量为全局变量不会创建它 - 所以这个表单有效:
def foo():
global x
try:
x
except NameError:
x = 1
这里要理解的关键是,当Python编译一个函数时,它会将函数内的每个变量“烘焙”为本地,非本地或全局(或内置)变量 - 对该变量的任何访问都将具有一个或另一个相关的字节码。因此,“全局”声明会影响整个函数,无论它是什么 - 并且由于tryig在全局语句看起来不明确之前访问变量,因此您看到的错误是强制的。
但是既然你在这里 - 你确定要这么做吗? 全局变量适用于可以在模块中的函数中共享的值 - 但是,即使要在对特定函数的调用中初始化它们,也应该在模块体中声明它们并进行适当的记录。如果在模块加载时无法获得最终值,只需将其指定为None即可。
答案 1 :(得分:0)
这样的事情可行。
def foo():
if not('x' in locals()):
global x
x = 1
foo()
print(x)
检查x变量是否存在。
您还可以检查变量是否声明为全局
if not('x' in globals()):