我想在main中定义一个全局变量,即我可以从main函数调用的任何函数使用的变量。
这可能吗?这样做的好方法是什么?
谢谢!
答案 0 :(得分:14)
你想要什么是不可能的*。您只需在全局命名空间中创建一个变量:
myglobal = "UGHWTF"
def main():
global myglobal # prevents creation of a local variable called myglobal
myglobal = "yu0 = fail it"
anotherfunc()
def anotherfunc():
print myglobal
不要这样做。
函数的重点是它需要参数。只需在函数中添加参数即可。如果您发现需要修改许多功能,则表明您应该将它们收集到一个类中。
*
详细说明为什么这是不可能的:未声明python中的变量 - 它们是在执行赋值语句时创建的。这意味着以下代码(从astronautlevel发布的代码派生)将破坏:
def setcake(taste):
global cake
cake = taste
def caketaste():
print cake #Output is whatever taste was
caketaste()
Traceback (most recent call last):
File "prog.py", line 7, in <module>
caketaste()
File "prog.py", line 5, in caketaste
print cake #Output is whatever taste was
NameError: global name 'cake' is not defined
这是因为调用caketaste
时,未发生cake
的分配。它只会在调用setcake
后发生。
您可以在此处看到错误:http://ideone.com/HBRN4y
答案 1 :(得分:5)
在内创建的方法(例如,main)中的变量是定义的本地。但是,您可以在方法外部创建全局变量,并从任何其他方法访问和更改其值。
要更改其值,请使用global
关键字。
答案 2 :(得分:1)
您需要使用global
语句。这些都比较简单。要做到这一点,只需在定义变量本身之前将变量定义为全局变量。
例如:
def setcake(taste):
global cake
cake = taste
def caketaste():
print cake
setcake('tasty')
caketaste() #Output is tasty
编辑: 对不起,我似乎误解了你的问题。请允许我现在尝试正确回答。
def printcake():
print cake #This function prints the taste of cake when called
def setcake(taste, printq):
global cake #This makes sure that cake can be called in any function
cake = taste #sets cake's taste
if printq: #determines whether to print the taste
printcake()
setcake('good', True) #Calls the function to set cake. Tells it to print result. The output is good
输出,如代码中所示:http://ideone.com/dkAlEp