2013-05-11 299 views
8

我想在main中定义一个全局变量,即一个变量,可以被我从main函数调用的任何函数使用。主函数内部的全局变量python

这可能吗?什么是一个很好的方法来做到这一点?

谢谢!

+1

你就不能传递变量作为自变量? – 2013-05-11 22:41:44

+0

是的,我可以,但我只是想看看是否有可能在主函数内部定义全局变量,也许这是一个坏主意...... – Dnaiel 2013-05-11 22:42:18

+0

全局变量只有当你有reallllllyyyy长代码时才会变得讨厌。但对于较小的代码,它们很好。 – astronautlevel 2013-05-11 23:11:55

回答

2

在内部创建的变量根据定义,方法(例如,main)是本地的。但是,您可以在方法之外创建一个全局变量,并从任何其他方法的角度访问和更改其值。

要更改其值,请使用global关键字。

+0

我想在里面定义一个变量我可以使用从main调用的其他函数的主要功能。也许你是对的,这是不可行的,因为main只是一种方法。 – Dnaiel 2013-05-11 22:41:27

+0

@Dnaiel为了您可以使用参数在程序的不同部分之间进行通信。我不知道可以从函数内部定义全局变量的方法。 – Levon 2013-05-11 22:43:13

+0

谢谢,听起来你是对的! – Dnaiel 2013-05-11 22:43:49

9

你想要什么是不可能的*。你可以在全局命名空间中创建一个变量:

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

您需要使用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

+1

如果你在setcake之前调用'caketaste',会发生什么? – Marcin 2014-02-17 16:42:27