python – 为什么在按位运算中没有提前终止?
发布时间:2020-05-25 06:23:41 所属栏目:Python 来源:互联网
导读:def func(): print no early termination return 0if __name__ == __main__: if 1 or func(): print finished 输出: finished 因为“1或func()”在没有调用func()的情况下提前终止,因为“1或者某事”总是正确的. 但是,当切换到按
def func():
print 'no early termination'
return 0
if __name__ == "__main__":
if 1 or func():
print 'finished'
输出: finished 因为“1或func()”在没有调用func()的情况下提前终止,因为“1或者某事”总是正确的. def func():
print 'no early termination'
return 0
if __name__ == "__main__":
if 1 | func():
print 'finished'
我得到输出: no early termination finished 这是为什么?这看起来效率不高 解决方法|不能短路,因为它的值取决于它的右手操作数,即使它的左手操作数是真的.例如,在x = 1 | 2 如果不知道右边有2,则无法确定x的值. 如果我们只关心if分支是否被采用,Python可能能够分析程序的结构并优化掉func调用,但是func的副作用必须发生才能使程序正确. Python无法判断对您来说“不提前终止”是否重要;据他所知,这是确保死人的开关不会释放神经毒素的信号. (很好的是,func的副作用不会发生,或者因为或者是专门为此而设计的.使用或告诉程序,如果左侧是真的,你不希望右侧评估.) (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
