2010-08-19 91 views
25

有沒有辦法獲取函數所需的參數名稱?Python列表函數參數名稱

def foo(bar, buz): 
    pass 

magical_way(foo) == ["bar", "buz"] 
+1

重複:http://stackoverflow.com/questions/582056/getting-list-of-parameters-inside-python-function,http://stackoverflow.com/questions/218616/getting-method-參數名稱在蟒蛇 – 2010-08-19 01:25:17

+3

也許還有一個是必要的,因爲我花了好半個小時試圖谷歌這沒有擊中那些愚蠢。 – Bemmu 2010-08-19 02:03:37

+1

這是OP現在的第一次打擊,這要歸功於OP問這個問題的方式。通過更好地構建問題來更容易地找到答案,這對於那些尋找答案的用戶來說絕對是相關的。 – episodeyang 2017-04-13 19:44:24

回答

39

使用從Python的標準庫中的inspect方法(執行內省最清潔,最可靠的方法)。

具體來說,inspect.getargspec(f)返回名稱和默認值f的論點 - 如果你只是想名字和不關心特殊形式*a**k

import inspect 

def magical_way(f): 
    return inspect.getargspec(f)[0] 

完全符合您表達的要求。

+3

您還可以在Python 2.6或更高版本中使用'return inspect.getargspec(f).args' – 2010-08-19 00:56:12

+0

@gnibbler,true,如果您使用的是Python App Engine(或嵌入Python 2.5的應用程序或更早的版本);我給出了可以在任何Python中使用的方法(自從2.1將'inspect'添加到標準庫之後) – 2010-08-19 01:05:15

+0

太棒了,非常感謝 – Bemmu 2010-08-19 02:04:08

9
>>> import inspect 
>>> def foo(bar, buz): 
...  pass 
... 
>>> inspect.getargspec(foo) 
ArgSpec(args=['bar', 'buz'], varargs=None, keywords=None, defaults=None) 
>>> def magical_way(func): 
...  return inspect.getargspec(func).args 
... 
>>> magical_way(foo) 
['bar', 'buz'] 
+0

請注意, '.args'只能在Python 2.6及更高版本中運行,對於舊版本,您必須使用'[0]'而不是' – Wolph 2010-08-19 01:03:31

+0

+1'來提供'magical_way()'函數。 – 2010-08-19 01:22:49