2016-12-02 13 views
2

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

是。 ''''''''或'是由語言保證的短路(正如我在[這個答案](http://stackoverflow.com/a/36551857/4014959)中所說明的),它不僅僅是一個實現細節。另外請注意,'all'和'any'功能短路;爲了充分利用這種行爲,你應該給他們發電機。 –

+0

更pythonic的方式,你可以做'如果d.get('b',None)== 2:',它將得到None如果鍵b不存在 – Skycc

+1

@Skycc如果你想默認值爲'None' get()'那麼它應該是'如果d.get('b')',因爲如果沒有找到它,它會自動返回'None'。第二個參數是用於定義一個自定義的默認值。 – roganjosh

回答

2

是的,它被稱爲短路和

兩個python2(Link to the doc)和python3.x(Link to the doc)支持短路andor

+0

謝謝。你能添加一個引用鏈接和/或示例代碼嗎? – Basj

+0

@Basj我已經用doc鏈接更新了答案。希望能幫助到你 – nu11p01n73R

相關問題