我如何才能找到一个Python函数的参数的数量?我需要知道它有多少普通参数和多少命名参数。

例子:

def someMethod(self, arg1, kwarg1=None):
    pass

这个方法有2个参数和1个命名参数。


当前回答

func.__code__。co_argcount给出了在*args之前任何参数的个数

函数。__kwdefaults__给你一个字典的关键字参数AFTER *args

func.__code__。Co_kwonlyargcount等于len(funct .__kwdefaults__)

函数。__defaults__提供了出现在*args之前的可选参数值

这里有一个简单的例子:

>>> def a(b, c, d, e, f=1, g=3, h=None, *i, j=2, k=3, **L):
    pass

>>> a.__code__.co_argcount
7
>>> a.__defaults__
(1, 3, None)
>>> len(a.__defaults__)
3
>>> 
>>> 
>>> a.__kwdefaults__
{'j': 2, 'k': 3}
>>> len(a.__kwdefaults__)
2
>>> a.__code__.co_kwonlyargcount
2

其他回答

func.__code__。co_argcount给出了在*args之前任何参数的个数

函数。__kwdefaults__给你一个字典的关键字参数AFTER *args

func.__code__。Co_kwonlyargcount等于len(funct .__kwdefaults__)

函数。__defaults__提供了出现在*args之前的可选参数值

这里有一个简单的例子:

>>> def a(b, c, d, e, f=1, g=3, h=None, *i, j=2, k=3, **L):
    pass

>>> a.__code__.co_argcount
7
>>> a.__defaults__
(1, 3, None)
>>> len(a.__defaults__)
3
>>> 
>>> 
>>> a.__kwdefaults__
{'j': 2, 'k': 3}
>>> len(a.__kwdefaults__)
2
>>> a.__code__.co_kwonlyargcount
2
import inspect
inspect.getargspec(someMethod)

查看inspect模块

In:

import inspect 

class X:
    def xyz(self, a, b, c): 
        return 

print(len(inspect.getfullargspec(X.xyz).args))

Out:

4


注意:如果xyz不在类X中,并且没有“self”,只有“a, b, c”,那么它将打印3。

对于3.5以下的python,您可能需要替换inspect。通过检查获得全部规格。在上面的代码中获取目标规格。

除此之外,我还看到help()函数在大多数情况下确实有帮助

例如,它给出了它所接受的参数的所有细节。

help(<method>)

给出以下内容

method(self, **kwargs) method of apiclient.discovery.Resource instance
Retrieves a report which is a collection of properties / statistics for a specific customer.

Args:
  date: string, Represents the date in yyyy-mm-dd format for which the data is to be fetched. (required)
  pageToken: string, Token to specify next page.
  parameters: string, Represents the application name, parameter name pairs to fetch in csv as app_name1:param_name1, app_name2:param_name2.

Returns:
  An object of the form:

    { # JSON template for a collection of usage reports.
    "nextPageToken": "A String", # Token for retrieving the next page
    "kind": "admin#reports#usageReports", # Th

Dimitris Fasarakis Hilliard的公认答案建议以字符串格式获取参数,但我认为在解析这个字符串时可能会犯错误,因此我直接使用inspect模块创建了一个参数列表

import inspect
def my_function(a,b,c):
    #some code
    pass

result=list(inspect.signature(my_function).parameters.keys())
print(result)
['a','b','c']