2013-05-11 17 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

相關問題