获取非默认函数参数

3

我有这个函数:

def func(a, b, c=1, d=2):
    pass

使用以下方式:

import inspect
inspect.getargspec(func)

我得到了这个结果:
ArgSpec(args=['a', 'b', 'c', 'd'], varargs=None, keywords=None, defaults=(1, 2))

有没有更简单的方法来查找不带默认值的函数参数? 对于上面的语句,我必须做一些丑陋的事情,例如:

ab = args[:-len(defaults)]

获取这些参数。现在,ab 将是 ['a', 'b']

谢谢。

[编辑] 更多澄清: 我想在函数 func 外执行检查,而不是在函数内部执行。


如果你四处看看,人们已经多次询问了这个问题。 - Maximas
这并没有帮助我。它与我的问题无关,而且我想在函数func之外找到这些东西,而不是在函数内部。 - Mihai Zamfir
@Maximas 那个链接实际上根本没有提到默认参数... - Mattias Nilsson
我知道,但是直觉和更多的研究可能会使其与默认增强功能一起工作 :) - Maximas
看一下 inspect.getargs 的实现,如果 CPython 开发人员想不出更简单的方法,那么很可能没有更简单的方法了。 - Dima Tisnek
“inspect”的简化版本看起来像这样:foo.func_code.co_varnames [: foo.func_code.co_argcount-len(foo.func_defaults)],但这只适用于简单的函数,例如不包括Python2元组参数,比如 def foo(x, (y, z), bar): pass - Dima Tisnek
1个回答

1

对于使用Python 3.3及以上版本的 Signature

In [15]: [x for x, y in inspect.signature(func).parameters.items() if y.default is y.empty]
Out[15]: ['a', 'b']

好的观点。不幸的是,我正在使用python 2.7,而inspect中没有signature - Mihai Zamfir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接