2012-11-26 141 views
1

適當所以我有很多的功能,在一個名爲definitions.py需要幫助使用變量,蟒蛇

我的主文件main.py文件,該文件訪問這些定義,也有使用這些功能它自己的功能。

現在main.py我有「從定義中導入*」

這兩個文件依賴於一組15個初始變量,這些變量我已經放在definitions.py,這是一切都很好,我有我的所有函數都能正常工作,但是當我想將我的應用程序用作模型時,問題就出現了,我想在其中更改一些變量以查看輸出的不同。

本質上我想我的初始變量是在每次調用函數時訪問的碗中,我可以交換和更改這個碗中的值,這意味着下一個被調用的函數使用更新的變量。

我現在遇到的問題是,我認爲,因爲變量是用definitions.py寫的,所以我不能改變它們。

即使在python shell中,我也可以把n1等於別的東西,執行一個使用n1的函數,但它會使用舊的n1,而不是新的,我想是因爲變量在definition.py中沒有改變文件。

是否有某種方法可以讓我不知道的活動訪問變量?謝謝。

回答

3

你應該使用一個類。例如,如果你的definitions.py文件有:

variable1 = 3 
variable2 = 'stuff' 

def spam(arg1): 
    return 'spam' + arg1 

def eggs(arg1,arg2): 
    return 'eggs' + arg1 + arg2 

將其更改爲

class Definitions(): 
    def __init__(): 
     self.variable1 = 3 
     self.variable2 = 'stuff' 

    def spam(self,arg1): 
     return 'spam' + arg1 

    def eggs(self,arg1,arg2): 
     return 'eggs' + arg1 + arg2 

現在,從您的main.py文件,你可以在一個稍微不同的方式導入,掃多個參數值:

import definitions 

for parameter in xrange(0,10): 
    defs = definitions.Definitions() 
    defs.variable1 = parameter 

    # do some stuff and store the result 

# compare the various results 

請記住,現在你的功能是在一個班級內,所以不要打電話給spam('mail'),你應該撥打defs.spam('mail'),等等。

+0

感謝,使用前面的代碼,我應該能夠使用文本文件導出和導入變量,並在每個'main.py'定義中告訴類使用此文本文件中的變量。 – Rapid

+0

我忘了添加「self」作爲所有類功能的第一個參數,這是工作所必需的。我糾正了我原來的答案。 – HerrKaputt