Python将lambda参数指定为函数参数

M. *_*mer 1 python lambda

是否有可能指定lambda作为函数参数可以采用多少个参数?

例如:

def func(k=lambda x:return x**2):
   return k
Run Code Online (Sandbox Code Playgroud)

我可以指定,如果k不是标准的lambda,那么k应该只取一个参数吗?

马克斯

Hol*_*olt 6

您可以使用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
Run Code Online (Sandbox Code Playgroud)

请注意,上面的内容会很糟糕(尽管它不应该):

func (lambda x, y = 8: x + y)
Run Code Online (Sandbox Code Playgroud)

...如果你想处理这种情况,你需要更复杂的东西:

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
Run Code Online (Sandbox Code Playgroud)