'';和';逻辑运算符与"&&引用;Python中的按位运算符?
我有两个Python案例: 1) 案例1: 此案例将给出一个结果:'';和';逻辑运算符与"&&引用;Python中的按位运算符?,python,bitwise-operators,logical-operators,Python,Bitwise Operators,Logical Operators,我有两个Python案例: 1) 案例1: 此案例将给出一个结果:和:False 2) 案例2: 这种情况将产生如下错误: Bitwise : Traceback (most recent call last): File "G:\Dropbox\Workspace_Python\PyGUI\default\__init__.py", line 6, in <module> print "Bitwise :", exists("") & os.path.getsi
和:False
2) 案例2:
这种情况将产生如下错误:
Bitwise :
Traceback (most recent call last):
File "G:\Dropbox\Workspace_Python\PyGUI\default\__init__.py", line 6, in <module>
print "Bitwise :", exists("") & os.path.getsize("")
File "C:\Python27\lib\genericpath.py", line 49, in getsize
return os.stat(filename).st_size
WindowsError: [Error 3] The system cannot find the path specified: ''
按位:
回溯(最近一次呼叫最后一次):
文件“G:\Dropbox\Workspace\u Python\PyGUI\default\\uuuuu init\uuuuuu.py”,第6行,在
打印“按位:”,存在(“”)和os.path.getsize(“”)
文件“C:\Python27\lib\genericpath.py”,第49行,在getsize中
返回os.stat(文件名).st\u大小
WindowsError:[错误3]系统找不到指定的路径:“”
您能帮我解释一下这两种情况之间的区别吗?在逻辑和
运算符中,如果第一个表达式为false,则不会计算第二个表达式。由于存在(“”
失败,os.path.getsize(“”
在第一种情况下永远不会执行
但是在按位&
运算符的情况下,两个操作数都必须求值才能得到结果。由于您无法统计无效文件(获取大小),因此它会失败并出现错误
引用文件
表达式x和y
首先计算x
;如果x
为false,则返回其值;否则,将计算y
,并返回结果值
还注意到
在布尔运算的上下文中,以及当控制流语句使用表达式时,以下值被解释为false:false
、None
、所有类型的数字零以及空字符串和容器(包括字符串、元组、列表、字典、集合和冻结集)。所有其他值都被解释为true
那么,当你评估
exists("") and os.path.getsize("")
存在(“”
返回False
,根据上面引用的文本,它将立即返回False
,而不必在逻辑和运算符中执行os.path.getsize(“”
),如果第一个表达式为False,它将不会计算第二个表达式。由于存在(“”
失败,os.path.getsize(“”
在第一种情况下永远不会执行
但是在按位&
运算符的情况下,两个操作数都必须求值才能得到结果。由于您无法统计无效文件(获取大小),因此它会失败并出现错误
引用文件
表达式x和y
首先计算x
;如果x
为false,则返回其值;否则,将计算y
,并返回结果值
还注意到
在布尔运算的上下文中,以及当控制流语句使用表达式时,以下值被解释为false:false
、None
、所有类型的数字零以及空字符串和容器(包括字符串、元组、列表、字典、集合和冻结集)。所有其他值都被解释为true
那么,当你评估
exists("") and os.path.getsize("")
exists(“”
返回False
,根据上面引用的文本,它将立即返回False
,而无需执行os.path.getsize(“”
),与大多数语言一样,如果第一个参数为False,逻辑and将立即中止(因为不管第二个参数是什么,结果都是一样的)
在您的示例中,如果将二进制AND(和
)翻转为OR(或
),该语言不能短路,因为第一个结果为false,它需要检查第二个结果,以确定它整体上应返回true还是false。与大多数语言一样,如果第一个参数为false,逻辑and将立即中止(因为无论第二个参数是什么,结果都是相同的)
在您的示例中,如果将二进制AND(和
)翻转为OR(或
),则该语言不能短路,因为第一个结果为false,它需要检查第二个结果,以确定其整体上是否应返回true或false。谢谢您给我的正确答案。这里的重点是“短路”@LongUni:是的,主要的一点是Python布尔/逻辑运算符可以短路,但出于设计原因,按位运算符不能短路。有时可以方便地对布尔值使用按位运算,例如a&=b
,但一般来说,在处理布尔值时使用布尔运算更好,并且只对在实际操作位时使用位运算。谢谢你给我的正确答案。这里的重点是“短路”@LongUni:是的,主要的一点是Python布尔/逻辑运算符可以短路,但出于设计原因,按位运算符不能短路。有时可以方便地对布尔值使用按位运算,例如a&=b
,但一般来说,在处理布尔值时使用布尔运算更好,并且只对在实际操作位时使用按位运算。
exists("") and os.path.getsize("")