我怎样才能find一个Python函数的参数数量?
我怎样才能find一个Python函数的参数数量? 我需要知道它有多less个正常参数以及多less个命名参数。
例:
def someMethod(self, arg1, kwarg1=None): pass 这个方法有2个参数和1个命名参数。
 以前接受的答案已经被弃用 ,从Python 3.0 。 而不是使用inspect.getargspec你现在应该selectSignature类来取代它。 
 通过signaturefunction为函数创build一个签名是容易的: 
 from inspect import signature def someMethod(self, arg1, kwarg1=None): pass sig = signature(someMethod) 
现在,您可以通过以下方法快速查看其参数:
 str(sig) # returns: '(self, arg1, kwarg1=None)' 
 或者也可以通过sig.parameters获得属性名称与参数对象的sig.parameters 。 
 params = sig.parameters print(params['kwarg1']) # prints: kwarg1=20 
 另外,你可以在sig.parameters上调用len来查看这个函数需要的参数个数: 
 print(len(params)) # 3 
  params映射中的每个条目实际上都是一个Parameter对象 ,具有更多的属性使您的生活更轻松。 例如,抓取一个参数并查看其默认值现在可以很容易地执行: 
 kwarg1 = params['kwarg1'] kwarg1.default # returns: None 
 对于parameters包含的其他对象也是如此。 
 至于Python 2.x用户,虽然inspect.getargspec 不被弃用,但是这个语言很快就会变成:-)。  Signature类在2.x系列中不可用,不会。 所以你仍然需要使用inspect.getargspec 。 
 至于在Python 2和Python 3之间进行转换,如果你的代码依赖于Python 2中的getargspec接口,并且切换到3 signature太困难了, 那么你确实有使用inspect.getfullargspec 的有价值的select 。 它提供了一个类似于getargspec (一个可调用的参数)的接口,以便获取函数的参数,同时还处理getargspec不支持的其他一些情况: 
 from inspect import getfullargspec def someMethod(self, arg1, kwarg1=None): pass args = getfullargspec(someMethod) 
 和getargspec , getfullargspec返回一个包含参数的NamedTuple 。 
 print(args) FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={}) 
 import inspect inspect.getargspec(someMethod) 
见检查模块
 someMethod.func_code.co_argcount 
或者,如果当前函数名称未定:
 import sys sys._getframe().func_code.co_argcount 
inspect.getargspec()
获取函数参数的名称和默认值。 返回四个元组的元组:(args,varargs,varkw,defaults)。 args是参数名称的列表(可能包含嵌套列表)。 varargs和varkw是*和**参数的名称或None。 defaults是默认参数值的元组,或者是没有默认参数的None; 如果这个元组有n个元素,它们对应于args中列出的最后n个元素。
在版本2.6中更改:返回一个命名的元组ArgSpec(args,varargs,关键字,默认值)。
请参阅can-you-list-the-keyword-arguments-a-python-function-receiving 。
除此之外,我也看到了大部分时间的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 
 正如其他答案所build议的,只要被查询的东西实际上是一个函数, getargspec可以正常工作。 它不适用于诸如open , len等内置函数,在这种情况下会抛出一个exception: 
 TypeError: <built-in function open> is not a Python function 
 下面的函数(受此答案启发)演示了一种解决方法。 它返回f期望的参数个数: 
 from inspect import isfunction, getargspec def num_args(f): if isfunction(f): return len(getargspec(f).args) else: spec = f.__doc__.split('\n')[0] args = spec[spec.find('(')+1:spec.find(')')] return args.count(',')+1 if args else 0 
 这个想法是从__doc__stringparsing函数规范。 显然这依赖于所述string的格式,所以很难!