这段代码在做什么?
>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'
这是来自这个页面的Python教程,我不太明白第二行的意思。
5 个回答
2
它只是给你返回第一个非空的字符串'特隆赫姆',这和下面的代码是一样的:
non_null = (string1 or string2) or string3
或者:
if not string1:
string3 if not string2 else string2
else:
string1
7
Python中的or
运算符可以这样理解:[1]
x or y : if x is false, then y, else x
当你写string1 or string2
时,如果string1
是一个空字符串,Python会把它看作False
(顺便说一下,有些编程语言这样处理,有些则不一样)。根据上面的定义,这个表达式的结果就是string2
的值。接着,如果你再写(string1 or string2) or string3
,因为string2
不是空字符串,所以它不等于False
,因此这个表达式的结果就是string2
。
4
这个内容展示了两个概念:a) 操作符短路和 b) 在Python中,逻辑运算符可以接受和返回非布尔值(也就是不是True或False的值)。
string1 or string2 or string3 # is the same as
(string1 or string2) or string3
# string1 or string2 is '' or 'Trondheim', and as
# '' is logically False, this results in 'Trondheim'
# 'Trondheim' or string3 is short-circuited and never evaluated,
# because a non-empty string is logically True