2013-10-26 32 views
2

請原諒我的措辭可憐的稱號,但這裏有一個更詳細的解釋:當我們將它們作爲變量傳遞時,我可以更改函數參數嗎?

我有一個函數,作爲參數需要被用來確定從數據庫中檢索數據的一些功能,例如:

def customer_data(customer_name, *args): 
    # initialize dictionary with ids 
    codata = dict([(data.__name__, []) for data in args]) 
    codata['customer_observer_id'] = _customer_observer_ids(customer_name) 

    # add values to dictionary using function name as key 
    for data in args: 
     for coid in codata['customer_observer_id']: 
      codata[data.__name__].append(data(coid)) 
    return codata 

這使得調用該函數看起來像這樣:

customer_data('customername', target_parts, source_group, ...) 

這些功能之一是一個額外的參數定義

def polarization_value(customer_observer_id, timespan='day') 

我想要的是一種巧妙地改變時間跨度變量的方法。一個明顯的方法是在customer_observer中包含一個關鍵字參數,並在被調用的函數名稱爲'polarization_value'時添加一個異常,但我有一種感覺,有更好的方法來做到這一點。

回答

5

您可以使用functools.partial並通過polarization_value爲:

functools.partial(polarization_value, timespan='day') 

例子:

>>> import functools 
def func(x, y=1): 
    print x, y 
...  
>>> new_func = functools.partial(func, y=20) 
>>> new_func(100) 
100 20 

您也可以有所幫助:Python: Why is functools.partial necessary?

+2

是啊,這是部分應用程序。 –

+0

完美,謝謝! –

相關問題