python – 为什么在按位运算中没有提前终止?

python – 为什么在按位运算中没有提前终止?,第1张

概述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 0if __name__ == "__main__":    if 1 or func():        print 'finished'

输出:

finished

因为“1或func()”在没有调用func()的情况下提前终止,因为“1或者某事”总是正确的.
但是,当切换到按位运算符时:

def func():    print 'no early termination'    return 0if __name__ == "__main__":    if 1 | func():        print 'finished'

我得到输出:

no early terminationfinished

这是为什么?这看起来效率不高

解决方法 |不能短路,因为它的值取决于它的右手 *** 作数,即使它的左手 *** 作数是真的.例如,在
x = 1 | 2

如果不知道右边有2,则无法确定x的值.

如果我们只关心if分支是否被采用,Python可能能够分析程序的结构并优化掉func调用,但是func的副作用必须发生才能使程序正确. Python无法判断对您来说“不提前终止”是否重要;据他所知,这是确保死人的开关不会释放神经毒素的信号.

(很好的是,func的副作用不会发生,或者因为或者是专门为此而设计的.使用或告诉程序,如果左侧是真的,你不希望右侧评估.)

总结

以上是内存溢出为你收集整理的python – 为什么在按位运算中没有提前终止?全部内容,希望文章能够帮你解决python – 为什么在按位运算中没有提前终止?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206639.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存