测试一个键是不是存在于字典中,如果 [重复] 则在相同的情况下进行另一个测试
Posted
技术标签:
【中文标题】测试一个键是不是存在于字典中,如果 [重复] 则在相同的情况下进行另一个测试【英文标题】:Test if a key is present in a dict and do another test in the same if [duplicate]测试一个键是否存在于字典中,如果 [重复] 则在相同的情况下进行另一个测试 【发布时间】:2017-04-17 06:14:07 【问题描述】:使用if ... and ...:
的以下代码是否安全,即我们确定首先测试第一个条件,并且如果密钥不存在,则忽略第二个条件?
d = 'a': 1
if 'b' in d and d['b'] == 2:
print 'hello'
似乎是的,因为这不会产生错误。但是否适用于所有 Python 版本?
它永远不会生成KeyError: 'b'
?
PS:这可能更pythonic,没有歧义:
if 'b' in d:
if d['b'] == 2:
...
【问题讨论】:
是的。and
和 or
都由语言保证短路(正如我在this answer 中说明的那样),它不仅仅是一个实现细节。另请注意all
和any
功能短路;为了充分利用这种行为,您应该为它们提供生成器。
更多pythonic方式,你可以if d.get('b', None) == 2:
,如果key b不存在,它将得到None
@Skycc 如果你希望默认值是get()
中的None
,那么它应该是if d.get('b')
,因为如果找不到它会自动返回None
。第二个参数用于定义自定义默认值。
@Skycc 在 Python 3(或带有 from __future__ import print_function
的 Python 2)中,您可以删除 if
并直接使用 d.get('b') == 2 and print('hello')
,尽管有些人会以可读性为由反对这种风格。跨度>
@PM2Ring :我会永远找到the question you marked as duplicate,因为我不知道正确的键盘“短路”了。已经知道这个关键字就等于知道答案,因为在文档中很容易找到,所以我觉得很难将其视为“重复”;)此外,这个重复的问题非常模糊(没有什么例子短路是有问题的......)
【参考方案1】:
是的,它被称为短路和。
python2(Link to the doc)和python3.x(Link to the doc)都支持短路and
和or
【讨论】:
谢谢。您可以添加参考链接和/或示例代码吗? @Basj 我已经用文档链接更新了答案。希望对你有帮助以上是关于测试一个键是不是存在于字典中,如果 [重复] 则在相同的情况下进行另一个测试的主要内容,如果未能解决你的问题,请参考以下文章