【发布时间】:2016-03-19 15:49:21
【问题描述】:
以下代码行在 Python 中是什么意思?
id = result and result[1] or False
注意:这个问题结合了运算符“and”和“or”。但是,“Stackoverflow”中提出的其他问题考虑到语句中只有这些运算符之一。
【问题讨论】:
标签: python python-2.7 variable-assignment
以下代码行在 Python 中是什么意思?
id = result and result[1] or False
注意:这个问题结合了运算符“and”和“or”。但是,“Stackoverflow”中提出的其他问题考虑到语句中只有这些运算符之一。
【问题讨论】:
标签: python python-2.7 variable-assignment
这似乎是为了避免在序列 result(例如列表、元组)包含少于 1 个项目时引发 IndexError。但是,如果这是有意为之,那就有缺陷了,因为 Python 序列是从 0 开始的,result[1] 访问序列中的 second 项。检查列表不为空并不能保证第二个项目存在。可能目的是检查序列中是否至少有 一个 项,并获取序列中的 第一个 项,而不是第二个。
而且,由于短路,or False 实际上是多余的。
这是if 声明的简写方式:
if result:
id = result[1]
else:
id = False
但正如我所说,它似乎有缺陷。这样会更好:
try:
id = result[1]
except IndexError:
id = False
或执行长度检查:
if len(result) > 1:
id = result[1]
else:
id = False
或:
id = result[1] if len(result) > 1 else False
或者继续问题中可怕的内联方法:
id = (len(result) > 1) and result[1]
这只是强调了代码不应该以问题所示的方式编写:目前尚不清楚代码的意图和结果是什么,需要一些思考才能理解它。 if 语句更具可读性,因此应该使用它。
【讨论】:
result[1] = 0,它可能与您的if 语句完全不一样。
这是该行的等效 Python 代码:
if result:
id = result[1]
else:
id = False
基本意思是:
如果
result的计算结果为True,则将id分配给result列表的第二个元素,否则将id分配为布尔值False
【讨论】:
该代码将 result[1] 项目(列表的第二项或第二个字母 rom 字符串)分配给 id 变量,如果它存在,否则 False 将分配给 id。
注意如果结果列表仅包含 1 个项目,则代码将失败并显示 IndexError。
【讨论】: