2013-12-23 57 views
0

我希望能夠包裝一個函數,同時仍然允許外部函數中的可選(關鍵字)參數。我可以這樣做:包裝python函數,但讓外部函數具有關鍵字arg

def outer(p1, p2, *a, **k): 
    inner(*a, **k) 

但是如果我想讓p2成爲「可選參數」呢?很顯然:

def outer(p1, p2=None, *a, **k): 
    inner(*a, **k) 

將無法​​正常工作,我知道爲什麼它不會工作。我想知道是否有一個很好的,乾淨的方式來實現這一點。有一些着名的模式或慣例嗎?

+0

使用函數裝飾器 – volcano

+5

你究竟是什麼意思*它不會工作*? – alko

+1

由**可選**你是否想要使用'p2'作爲關鍵字唯一的參數?如果是這樣的話,請嘗試:[Python 2.x - 帶有* args和** kwargs的默認參數](http://stackoverflow.com/q/15301999/846892) –

回答

1

使用functools模塊:

outer2 = functools.partial(outer, p2=None) 
1

如果你只是想確保P2時的參數從外部傳遞給內部存在:

def outer(p1, *a, **k): 
    if 'p2' not in k: k.update(p2 = None) 
    inner(*a, **k) 

你可以更通用方式保留默認值並在需要時應用:

def outer (p1, *args, **kwargs): 
    defaults = {'a': 1, 'b':2} 
    for k, v in defaults.items(): 
     if k not in kwargs: kwargs[k] = v 
    inner(*a, **k) 

如果是這種情況,您可能會遇到nt來編輯你的帖子的標題爲'如何在** kwargs參數中包含默認值',因爲包裝不是語法的一部分

相關問題