涉及逻辑运算的python表达式的运算顺序
高洛峰
高洛峰 2017-04-18 09:31:29
[Python讨论组]

以下代码并不报错,而我理解在"point 1"处如果先运算小括号里面的表达式,而y并不存在,不应该报错吗?难道发现x == 10的短路运算优先于小括号里面的表达式运算?

将这一行中x == 10改为x == 100后报错了,这个理解没问题。

# coding: utf-8

if __name__ == "__main__":
    x = 100
    if x == 10:
        y = 200
    # no y exist here
    if x == 10 and (y - 1 == 199):    # point 1
        print "ok"
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
伊谢尔伦

从左到右计算

括号不改变这一事实

ringa_lee

这个很正常啊, 建议看下这个帖子:

python中 and 和 or 运算的核心思想 ——— 短路逻辑

就你的例子来说, and前的x == 10False, 所以短路其后所有and表达式,直到有or出现,输出and左侧表达式到or的左侧,参与接下来的逻辑运算, 然而并没有发现, 所以位于and右侧的表达式(y - 1 == 199)直接被无视掉, 相当于空气;

如果把x == 10改为x == 100, 这时and左侧为True, 右侧的表达式不能短路, 要参与逻辑运算, 此时由于局部变量y并没有被创建, 所以会报错, 报错内容应该是类似这种

NameError: name 'y' is not defined
巴扎黑

1!!!!!!!!!!!!!!!!!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号