2012-06-15 59 views
2

這裏有我在想什麼的例子:Python:有沒有辦法從其他函數訪問變量而不使用'global'?

def check_args(): 
    if len(sys.argv) < 2: 
     sys.exit('Reason') 
    if not os.path.exists(sys.argv[1]): 
     sys.exit('ERROR: Folder %s was not found!' % sys.argv[1]) 
    global path 
    path = sys.argv[1] 

正如你可以check_args後告訴()完成succefully「路徑」變量普遍意義的 - 你可以在其它功能事實上的變量使用。

所以我想如果有一種方法來訪問「路徑」,例如check_args.path?

在python v3中如何?

+0

也沒有使用類? – moooeeeep

+2

這可能只是一個例子,但如果這與您的實際代碼相近,您可能需要查看一個命令行解析庫('argparse'是最近被包含在python中的一個)。 – mgilson

+0

您不必將代碼放入函數中。只需在模塊頂部附近定義一個全局'path'變量即可。你可以像@ lanzz的回答那樣將它存儲爲一個函數的屬性,但這幾乎是一樣的,因爲你的函數是一個全局模塊對象。 – martineau

回答

3

Python函數是對象。你可以定義你想對他們的任何自定義屬性:

def a(): 
    a.test = 123 

a() 
a.test # => 123 
+2

功能上需要的屬性通常是你想要一個類的標誌,可能是'__call__'。 –

0

可以使用if __name__ ...當簡單的返回值

def check_args(): 
    if len(sys.argv) < 2: 
     sys.exit('Reason') 
    if not os.path.exists(sys.argv[1]): 
     sys.exit('ERROR: Folder %s was not found!' % sys.argv[1]) 
    path = sys.argv[1] 
    return path 

my_path = check_args() 

或:

if __name__ == '__main__': 
    my_path = check_args() 
    results = do_something(path) 
相關問題