下面的代碼是否安全使用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