是否有可能指定一个 lambda 作为函数参数可以接受多少个参数?
例如:
def func(k=lambda x:return x**2):
return k
如果 k 不是标准的 lambda,我可以指定 k 应该只接受一个参数吗?
最大
请您参考如下方法:
你可以使用 inspect.getargspec 做这样的事情:
import inspect
def func (k = lambda x: x ** 2):
if not callable(k) or len(inspect.getargspec(k).args) != 1:
raise TypeError('k must take exactly one argument.')
# Do whatever you want
请注意,上面的代码会悲惨地失败(虽然它不应该):
func (lambda x, y = 8: x + y)
...所以如果你想处理这种情况,你需要一些更复杂的东西:
import inspect
def func (k = lambda x: x ** 2):
if not callable(k):
raise TypeError('k must be callable.')
argspec = inspect.getfullargspec(k)
nargs = len(argspec.args)
ndeft = 0 if argspec.defaults is None else len(argspec.defaults)
if nargs != ndeft + 1:
raise TypeError('k must be callable with one argument.')
# Do whatever you want
