在表达式中使用逻辑运算符
Using logical operators in an expression
我正在尝试理解那段代码:
s = list()
r = string()
# actual bit of code:
print(s and 'ERROR' or r or 'EMPTY')
这是做什么的:
- 如果
s
不是一个空列表,那么你必须打印'ERROR'
- 否则,如果
r
不是空字符串,则必须打印 r
- 否则打印
'EMPTY'
我现在正试图理解为什么这样做有效,以及更广泛地理解如何在表达式中使用逻辑运算符,就像在这个例子中一样。
x and y
是 x
如果它是“false-y”(即 0
、False
、None
、[]
, ''
, ...), 否则为 y
.
如果是“truth-y”,x or y
就是x
,否则就是y
.
即x or y
等同于x if x else y
,x and y
等同于x if not x else y
。
如果 s
是 non-empty,s and 'ERROR'
产生真值 'ERROR'
,short-circuited or
表达式的其余部分。
如果 s
为空,s and 'ERROR'
产生假值 []
,这导致对 r
的评估以确定整个表达式的值是否为r
或 EMPTY
.
使用 non-Boolean 参数来尝试更小的示例有助于了解 and
和 or
是如何工作的。
>>> [] and "ERROR"
[]
>>> ["foo"] and "ERROR"
"ERROR"
这里使用条件表达式可能更清楚:
print("ERROR" if s else (r or "EMPTY"))
或者只是使用“天真的”if
语句。
if s:
print("ERROR")
elif r:
print(r)
else:
print("EMPTY")
这道题更侧重于逻辑运算符和Short-circuit评价
。
首先,您需要了解每个变量都有一个与之关联的布尔值。
空列表为假,长度为1或更大的列表为真。这可以使用 bool()
运算符进行检查:
>>> bool([])
False
>>> bool(['a'])
True
同样,空字符串为假,一个或多个字符的字符串为真。
>>> bool('')
False
>>> bool('string')
True
表达式s and 'ERROR' or r or 'EMPTY'
计算如下:
bool(s) and bool('ERROR')
or
bool(r)
or
bool('EMPTY')
当其中任何一个为真时,评估结束。这只是评估的顺序。
我正在尝试理解那段代码:
s = list()
r = string()
# actual bit of code:
print(s and 'ERROR' or r or 'EMPTY')
这是做什么的:
- 如果
s
不是一个空列表,那么你必须打印'ERROR'
- 否则,如果
r
不是空字符串,则必须打印r
- 否则打印
'EMPTY'
我现在正试图理解为什么这样做有效,以及更广泛地理解如何在表达式中使用逻辑运算符,就像在这个例子中一样。
x and y
是 x
如果它是“false-y”(即 0
、False
、None
、[]
, ''
, ...), 否则为 y
.
如果是“truth-y”,x or y
就是x
,否则就是y
.
即x or y
等同于x if x else y
,x and y
等同于x if not x else y
。
如果 s
是 non-empty,s and 'ERROR'
产生真值 'ERROR'
,short-circuited or
表达式的其余部分。
如果 s
为空,s and 'ERROR'
产生假值 []
,这导致对 r
的评估以确定整个表达式的值是否为r
或 EMPTY
.
使用 non-Boolean 参数来尝试更小的示例有助于了解 and
和 or
是如何工作的。
>>> [] and "ERROR"
[]
>>> ["foo"] and "ERROR"
"ERROR"
这里使用条件表达式可能更清楚:
print("ERROR" if s else (r or "EMPTY"))
或者只是使用“天真的”if
语句。
if s:
print("ERROR")
elif r:
print(r)
else:
print("EMPTY")
这道题更侧重于逻辑运算符和Short-circuit评价 。 首先,您需要了解每个变量都有一个与之关联的布尔值。
空列表为假,长度为1或更大的列表为真。这可以使用 bool()
运算符进行检查:
>>> bool([])
False
>>> bool(['a'])
True
同样,空字符串为假,一个或多个字符的字符串为真。
>>> bool('')
False
>>> bool('string')
True
表达式s and 'ERROR' or r or 'EMPTY'
计算如下:
bool(s) and bool('ERROR')
or
bool(r)
or
bool('EMPTY')
当其中任何一个为真时,评估结束。这只是评估的顺序。