首页 文章

Python-当第一个值为False时,评估复合if语句

提问于
浏览
0

我在一个带有几个部分的if语句中遇到了奇怪的行为,我根本无法弄清楚发生了什么,虽然很明显我错过了至少python认为很明显的东西 .

这是我的语法:

if not(boolean) & (fogXLeft < float(cols[xCol])) < fogXRight) & (fogYBot < float(cols[yCol]) < fogYTop): 
    print "boolean: " + str(boolean)
    boolean = True

问题在于,即使布尔值设置为True(因此不是(布尔值)为False),每次都会输入if语句 . (我知道因为“boolean:True”被反复打印出来 . )但是,当我注释掉结束部分时,它只是基于bool评估:

if not(boolean): # & (fogXLeft < float(cols[xCol]) < fogXRight) & (fogYBot < float(cols[yCol]) < fogYTop):
    print "boolean: " + str(boolean)
    boolean = True

那么if语句只输入一次(因为从那时起布尔值设置为True) .

我认为问题可能与复合比较有关(尽管我知道这是合法的语法),但这也会在每次迭代时输入if语句:

if not(boolean) & (fogXLeft < float(cols[xCol])): #< fogXRight) & (fogYBot < float(cols[yCol]) < fogYTop):  
    print "boolean: " + str(boolean)
    boolean = True

我在这里想念的是什么?我很沮丧 .

谢谢 .

2 回答

  • 1

    not 是一个运算符,而不是一个函数 . & 是一个优先级高于 not 的运算符 .

    所以:

    if not(boolean) & (fogXLeft < float(cols[xCol])) < fogXRight) & (fogYBot < float(cols[yCol]) < fogYTop):
    

    相当于:

    if not ((boolean) & (fogXLeft < float(cols[xCol])) < fogXRight) & (fogYBot < float(cols[yCol]) < fogYTop)):
    

    反过来,如果 booleanTrue 相当于:

    if not (1 & (fogXLeft < float(cols[xCol])) < fogXRight) & (fogYBot < float(cols[yCol])  < fogYTop)):
    

    如果其他两个比较中的任何一个失败,那将是真的 .

  • 4

    & 是一个按位运算符,而不是 and 运算符条件 . 而是使用 and 逻辑运算符,而不是按位运算符 .

相关问题