下面的代码是否安全使用if ... and ...:
,即我们确定的第一个条件是先测试并且如果密钥不存在,第二个条件被忽略?测试密钥是否出现在字典中,并在相同的情况下做另一个测试
d = {'a': 1}
if 'b' in d and d['b'] == 2:
print 'hello'
看来是的,因为这不会产生错误。但是,所有Python版本都适用?
它不会生成KeyError: 'b'
?
PS:这可能是更Python,毫不含糊:
if 'b' in d:
if d['b'] == 2:
...
是。 ''''''''或'是由语言保证的短路(正如我在[这个答案](http://stackoverflow.com/a/36551857/4014959)中所说明的),它不仅仅是一个实现细节。另外请注意,'all'和'any'功能短路;为了充分利用这种行为,你应该给他们发电机。 –
更pythonic的方式,你可以做'如果d.get('b',None)== 2:',它将得到None如果键b不存在 – Skycc
@Skycc如果你想默认值为'None' get()'那么它应该是'如果d.get('b')',因为如果没有找到它,它会自动返回'None'。第二个参数是用于定义一个自定义的默认值。 – roganjosh