2014-03-02 19 views
2

如果我有功能或方法,我可以找到哪些參數是「預先分配的?」例如。如果我寫我可以在python中找到哪些參數是「預先分配的」?

def action(one, two, three=3): pass 

我可以得到其中有賦值運算符的參數列表嗎?在這種情況下,當然這將是

['three'] 

認爲答案可能在於inspectinspect.getargspec(action) is really close,因爲它返回默認參數的元組,但它不會說每個參數屬於哪個參數。

+0

的缺省值必須屬於最後的參數(如[文檔](http://docs.python.org/2/library/inspect.html#inspect.getargspec)中所述)。 – BrenBarn

回答

4

inspect.getargspec() documentation

默認是默認參數值的元組或無如果沒有缺省參數; 如果該元組具有Ñ元件,它們對應於ARGS列出的最後Ñ元件。

強調我的。

所以,爲了您的默認值匹配的參數,使用:

dict(zip(argspec.args[-len(argspec.defaults):], argspec.defaults)) 

得到一個字典映射的參數名稱爲默認值:

>>> import inspect 
>>> def action(one, two, three=3): pass 
... 
>>> argspec = inspect.getargspec(action) 
>>> dict(zip(argspec.args[-len(argspec.defaults):], argspec.defaults)) 
{'three': 3} 
相關問題