Python自定义函数多参数判断逻辑失效,运行后无输出
判断逻辑失效的核心根因与修复方案
代码存在两处根本性错误
- 对比逻辑的写法完全不符合预期
代码中写出的[not None, None, None, None]并不能表达“P2取值非空、其余三个可选参数为None”的判断规则:not None是独立的布尔运算,求值结果恒为True,这个字面列表的实际内容是[True, None, None, None]。对应你调用say_hi('Jack', 'Rose')的场景,左侧由实际参数组成的列表是['Rose', None, None, None],两边内容维度完全不同,根本不存在匹配的可能。 - 运算符使用逻辑错误
Python中is用于判断两个对象是否是内存中的同一实体,而非判断两个对象的值是否相等。每次通过方括号书写列表字面量,都会在内存中生成一个全新的列表对象,哪怕两个列表内容完全一致,用is做对比也永远返回False。原代码中左右两个列表都是独立创建的新对象,从内存地址层面就不可能满足is的判断条件。
符合预期的可运行代码
按照最初的分支触发条件——P2非空、P3/P4/P5全部为None时执行打印逻辑,修改后代码如下:
def say_hi(P1, P2=None, P3=None, P4=None, P5=None): if P2 is not None and P3 is None and P4 is None and P5 is None: print(f'hi {P1}') print(f'hi {P2}') say_hi('Jack', 'Rose')
上述代码运行输出结果为:
hi Jack hi Rose
如果后续参数匹配规则变复杂,也可以通过元组值匹配的方式简化判断逻辑,注意此处做值对比时需使用==而非is:
def say_hi(P1, P2=None, P3=None, P4=None, P5=None): if (P2 is not None, P3, P4, P5) == (True, None, None, None): print(f'hi {P1}') print(f'hi {P2}')
内容的提问来源于stack exchange,提问作者God_ppt
相关产品推荐
相关产品推荐

