我在一个带有几个部分的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 回答
not
是一个运算符,而不是一个函数 .&
是一个优先级高于not
的运算符 .所以:
相当于:
反过来,如果
boolean
是True
相当于:如果其他两个比较中的任何一个失败,那将是真的 .
&
是一个按位运算符,而不是and
运算符条件 . 而是使用and
逻辑运算符,而不是按位运算符 .