我试图从单个参数或列表构造一个python lambda函数,并且我不确定用于构建lambda的语法:
def check_classes_filter(*class):
return lambda x: isinstance(x, class) and isinstance(x, class[1]...)
lambda应该检查x是否是传递给函数的任意数量的类的实例(一个或多个)。
是否有一种通用的方法从python中的任意数量的参数构建函数,可能作为一种理解?
答案 0 :(得分:3)
您可以使用classes
循环遍历all
args。
def check_classes_filter(*classes):
return lambda x: all(isinstance(x, c) for c in classes)
>>> fun = check_classes_filter(str)
>>> fun('hello')
True
>>> fun = check_classes_filter(int, str)
>>> fun('hello')
False
虽然我更喜欢传递list
个班级
def check_classes_filter(classes):
return lambda x: all(isinstance(x, c) for c in classes)
并将该函数调用为
check_classes_filter([int, str])
答案 1 :(得分:2)
如果要检查对象是否是任何列出的类的实例,则无需定义任何内容:
>>> isinstance('test', int)
False
>>> isinstance('test', str)
True
>>> isinstance('test', (int, str))
True
如果classinfo是类型对象的元组(或者递归,则是其他类似对象) tuples),如果object是任何类型的实例,则返回true。
在您的问题中,您提到if x is an instance of any number of classes that is passed to the function (either one or many)
,这意味着您应该在布尔逻辑中or
而不是and
。如果要检查对象是否是每个列出的类的实例,请参阅answer with all
。