2012-08-11 19 views
3
def thefunction(a=1,b=2,c=3): 
    pass 

print allkeywordsof(thefunction) #allkeywordsof doesnt exist 

這將使[A,B,C]獲取關鍵參數的功能,Python的

有沒有像allkeywordsof的功能?

我不能改變任何東西里面,thefunction

+2

[在python獲取方法的參數名稱]的http://stackoverflow.com/questions/2677185/how-read-method-signature – 2012-08-11 13:23:17

+0

可能重複的重複(http://stackoverflow.com/questions/ 218616/getting-method-parameter-names-in-python) – Marcin 2012-08-11 17:58:47

回答

1

你想是這樣的:

>>> def func(x,y,z,a=1,b=2,c=3): 
    pass 

>>> func.func_code.co_varnames[-len(func.func_defaults):] 
('a', 'b', 'c') 
+0

co_varnames是一個錯誤的決定,它也包含非關鍵字參數和主題起始者只需要關鍵字參數 – 2012-08-11 13:28:36

+0

這一個是好的,因爲我們不需要使用檢查 – user1513192 2012-08-11 13:31:34

+2

@RostyslavDzinko是的,你是對的,但問題是'inspect.getargspec()'也返回非關鍵字參數。 – 2012-08-11 13:32:43

18

我認爲你正在尋找inspect.getargspec

import inspect 

def thefunction(a=1,b=2,c=3): 
    pass 

argspec = inspect.getargspec(thefunction) 
print(argspec.args) 

產量

['a', 'b', 'c'] 

如果你的函數同時包含位置和關鍵字參數,然後找到關鍵字參數的名稱更復雜一些,但不要太用力:

def thefunction(pos1, pos2, a=1,b=2,c=3, *args, **kwargs): 
    pass 

argspec = inspect.getargspec(thefunction) 

print(argspec) 
# ArgSpec(args=['pos1', 'pos2', 'a', 'b', 'c'], varargs='args', keywords='kwargs', defaults=(1, 2, 3)) 

print(argspec.args) 
# ['pos1', 'pos2', 'a', 'b', 'c'] 

print(argspec.args[-len(argspec.defaults):]) 
# ['a', 'b', 'c'] 
+0

如何才能讓它成爲agrs only – user1513192 2012-08-11 13:24:45

+3

'inspect.getargspec(thefunction).args' – jamylak 2012-08-11 13:26:02

+4

'argspec.args [-len(argspec.defaults): ]「這應該被接受,因爲它回答了這個問題。 – jamylak 2012-08-11 13:38:17

1

您可以執行下列操作,以得到你所尋找什麼。

>>> 
>>> def funct(a=1,b=2,c=3): 
...  pass 
... 
>>> import inspect 
>>> inspect.getargspec(funct)[0] 
['a', 'b', 'c'] 
>>>