搜尋

首頁  >  問答  >  主體

涉及逻辑运算的python表达式的运算顺序

以下代码并不报错,而我理解在"point 1"处如果先运算小括号里面的表达式,而y并不存在,不应该报错吗?难道发现x == 10的短路运算优先于小括号里面的表达式运算?

将这一行中x == 10改为x == 100后报错了,这个理解没问题。

# coding: utf-8

if __name__ == "__main__":
    x = 100
    if x == 10:
        y = 200
    # no y exist here
    if x == 10 and (y - 1 == 199):    # point 1
        print "ok"
高洛峰高洛峰2893 天前427

全部回覆(3)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:33:29

    從左到右計算

    括號不改變這一事實

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-18 09:33:29

    這個很正常啊, 建議看下這個帖子:

    python中 and 和 or 運算的核心思想 ——— 短路邏輯

    就你的例子來說, and前的x == 10False, 所以短路其后所有and表达式,直到有or出现,输出and左侧表达式到or的左侧,参与接下来的逻辑运算, 然而并没有发现, 所以位于and右侧的表达式(y - 1 == 199)直接被無視掉, 相當於空氣;

    如果把x == 10改为x == 100, 这时and左侧为True, 右侧的表达式不能短路, 要参与逻辑运算, 此时由于局部变量y並沒有被創建, 所以會報錯, 報錯內容應該是類似這種

    NameError: name 'y' is not defined

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:33:29

    1!

    回覆
    0
  • 取消回覆