如何不使用if语句让变量通过多lambda条件函数校验?
实现带终止提示的多条件校验函数
你的需求是实现一个函数,让变量依次通过一组lambda条件校验:所有条件满足则返回1;只要有一个条件不满足,立刻终止校验并返回该条件的提示信息。
原示例代码存在两处问题:
- lambda是单一表达式结构,不能直接使用
return关键字,只能通过表达式结果返回值 all()函数用法错误,它仅接收可迭代对象作为参数,无法直接传递条件组和待校验变量
以下是正确的实现方案:
def is_conditions_met(y): # 每个条件lambda返回(校验结果, 错误提示)的二元组 conditions = ( lambda x: (isinstance(x, int), "Wrong type"), lambda x: (x % 2 == 0, "Not even"), lambda x: (x >= 40, "Less than 40") ) # 逐个执行校验,不满足则立即返回提示 for check in conditions: valid, message = check(y) if not valid: return message # 所有条件通过,返回1 return 1
测试示例
>>> is_conditions_met('foo') 'Wrong type' >>> is_conditions_met(14) 'Less than 40' >>> is_conditions_met(42) 1
内容的提问来源于stack exchange,提问作者TheKenjiMT
相关产品推荐
相关产品推荐

