"return someString and partString in someString" 在 Python3

"return someString and partString in someString" in Python3

test1 = "this is test line"  # non-empty string
test2 = ""                   # empty string

def test_line(line):
    return line and not "is" in line

test1_result = test_line(test1)
test2_result = test_line(test2)

print(test1_result)  # True
print(test2_result)  # empty line printed

我见过几个人使用这种代码进行布尔输出

return someString and not partString in someString # "not" is optional

为什么 test2 结果是空行?通过添加 someString 作为参数,与仅使用 partString in someStirng?

相比,我们得到了什么附加功能

在你第二次使用空字符串调用函数时,你实际上是这样做的

return "" and not "is" in ""

and 表达式由于第一个条件评估为 False 而短路(您不需要两个条件都失败才能使 and 失败)和因此它作为空字符串返回。不会评估第二个布尔条件。

>>> bool("")
False
>>> "" and 1 == 1/0
''
>>> False and 1 == 1/0
False

但是,当您使用非空字符串执行此操作时,布尔表达式的两个部分都会被求值,因此如预期的那样给出异常

>>> bool("b")
True
>>> "b" and 1 == 1/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> "b" and 1 == 1
True