2017-10-08 222 views
0

我有一個得到了需要一定的變數代碼爲喜歡分享:Python的 - 如何共享功能之間的變量(不使用全局變量)

def example(arg): 
    req = urllib2.Request(r'{}'.format(arg)) 
    ... 
def exampe2(arg): 
# i need this func to access req 
# i think i can't use req as a global var since the program might need to get imported and it would run from main() (which is again a function) 

真的想你的幫助!

+1

您只需添加另一個參數 –

+0

從'example'返回它,將它傳遞給'exampe2'。或者如果前者調用後者,直接傳遞它。 – jonrsharpe

回答

0

正如評論中所說;你可以做一個傳遞參數的方法which'd這樣的應用:

def example2(arg, req): 
    .... 

def example(arg): 
    req = urllib2.Request(r'{}'.format(arg)) 
    ... 
    return example2(..., req) 

或者,你可以很容易地整合這兩個功能,你可以在exampleexample2將二者結合起來arg參數。

0

這個例子可以幫助我猜

def example1(arg): 
    example1.request = "from example1" 
    .... 

def example2(arg): 
    print(example1.request) 

example1("arg1") 
example2("arg2") 

> from example one 

否則你可以要求全球和使用示例2函數內這一請求varable。但是,您只需在example2之前執行example1即可。或者,您可以返回example1中的請求,並將example1返回值分配給example2中的另一個變量。

+0

如果交換函數調用,則不會運行,因爲屬性'example1.request'需要通過創建一個新的函數對象來實例化。另外,這是否真的是Pythonic?依賴於真正成爲Python中的對象的函數看起來很複雜。 – plan

0

只要將它作爲返回值和參數傳遞?這是一項功能,因爲它可以讓您儘可能保持本地化。如果你的函數需要大量的參數或者提供很多的輸出,通常它可以被分解成多個函數(一個函數應該理想地做一個明顯分離的東西並且被命名爲這樣的函數)。

當然,在某些情況下,您希望傳遞一些數據,例如配置選項:您可能會爲此創建一些新對象,但爲何不僅僅是一本字典?

def make_request(arg, config): 
    req = urllib2.Request(r'{}'.format(arg)) 
    config['req'] = req 
    return config 

注意,我返回的字典config,即使它是沒有必要的,因爲類型的字典在Python可變的。這只是在代碼中明確表示我正在修改它。現在我們可以使用配置:

def exampe2(arg, config): 
    arg = config['arg'] 
    ...do stuff.. 
相關問題