2017-03-16 62 views
1

我使用一個模塊有不同的參數名稱或多或少作同樣用途的定義很多功能:的Python:如何通過傳遞參數名變量

def func1(start_date): 
    .... 
def func2(startdate): 
    .... 
def func3(s_date): 
    .... 
def func4(sdate): 
    .... 

,他們似乎都在不同位置參數列表(在上面的簡化情況下,它們都處於位置1,但實際情況並非如此)。

我想編寫一個包裝,可以通過從函數名參數名字典通過實際的start_date任何這些功能:

def func2arg_name(): 
    return {'func1' : 'start_date', 
      'func2' : 'startdate', 
      'func3' : 's_date', 
      'func4' : 'sdate' } 

那麼實際包裝:

f2a = func2arg_name() 
def func(func_name, sdate): 
    locals()[func_name](f2a[func_name] = sdate) 

func('func1', '20170101') 

顯然這不起作用。本質上,f2a [func_name]不被識別爲合法關鍵字。是否有人知道如何做到這一點,即使用變量傳遞參數名稱?備註func1func4是外部定義的,不能更改。

回答

1

進行帶參數的名稱作爲關鍵字的字典,並使用解壓操作傳遞:

locals()[func_name](**{f2a[func_name]: sdate}) 

Unpacking argument lists在Python教程。