因为有程序要用到操作注册表,在学习其他的代码中,有一句是用|来表示的
reg_flags = win32con.WRITE_OWNER|win32con.KEY_WOW64_64KEY|win32con.KEY_ALL_ACCESS
当时以为|是个或,即OR的用法,但使用|表示OR时,出错了,当时由于解决用了其他的方法,就一直没有在意,当细研究才发现,|绝对不是简单的或的用法。
现总结如下:当x=5;y=3时
1、当两边都有判定条件时,|两侧用加()的表达式时,与OR的用法相同。
如(x==2)|(y==3)
即为TRUE。即x=2或y=3成立,则为True
2、当两边都有判定条件时,|两侧没有用()的表达式时,先计算|,再判定其他部分,
如:(x==2|y==3)
为 False。令人十分纳闷,怎么会出现这样的情况。
我们先看第3条规则,回头再来理解为什么是False。
3、当两边为数字时,计算规则为两边的数字转化为二进制,每进位进行运算或的关系,则有
(3|10)=11 (5|3)=7
用二进制表示中3=11 5=101 10=110
则:
0011+
1010=1011即11 即3|10为11
101+
011=111 即7 即5|3=7
这里1可以理解为True。0为Flase,0 or 0=0; 0 or 1=1 ;1 or 1=1;
回头再看2中的情况,
首先计算的是2|y ,即2|3 即为3 10+11=11
再来计算(x==3==3);
首先是x==3
为Flase,
再来计算Flase==3
为Flase
所以想要用|表示OR,则要在|两侧加上()
((x==2)|(y==3))
这样的表达方式更为准确。
下面的代码非常有迷惑性了:
print (y==3|x==5)
这是False
(True|1==1))
这是True
((y==3|x)==2)
这是False