如何将字符串判断条件作为函数参数传递且避免提前执行报错?
解决方案
原写法的问题在于列表里的三个判断表达式会在check函数调用前就被计算求值,此时函数内部的str1还没被创建,全局作用域也没有这个变量,因此触发NameError。
你可以把判断逻辑包装为延迟执行的可调用对象,避免参数在函数调用前就被计算。这里用lambda匿名函数封装每个判断条件即可,每个lambda接收一个参数对应函数内部的str1,在函数内部再逐个执行这些条件得到结果。
修改后的可运行代码:
def check(conditions): str1 = '/' # 遍历所有条件,传入内部的str1执行得到结果 result = [cond(str1) for cond in conditions] print(result) check(conditions=[ lambda s: s.find('//www.fao.org') != -1, lambda s: s.find('//fao.org') != -1, lambda s: s[0] == '/' ])
运行后输出为[False, False, True],完全符合预期。
内容的提问来源于stack exchange,提问作者ardito.bryan
相关产品推荐
相关产品推荐

