V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
YouMoeYi
V2EX  ›  Python

Python 条件判断问题

  •  
  •   YouMoeYi · 2021-02-21 12:07:03 +08:00 · 3101 次点击
    这是一个创建于 1356 天前的主题,其中的信息可能已经有所发展或是发生改变。

    起因是这样的, 我妈在家无事报了个免费的 Python 学习班, 现在学到条件判断了
    然后就像很多新手一样数值范围的条件判断写成了 a <= x <= b 的形式,
    然后我看到了就告诉我妈说是要写成 a <= x and x <= b 的形式,
    但是她说写成 a <= x <= b 是对的
    然后我不信就试了一下, 结果如下
    Python 中
    1 <= 4 <= 3 是 False
    JavaScript 中
    1 <= 4 <= 3 是 true
    Python 的结果为什么是这样?
    我个人的思路是这样的
    运算符优先级相同, 比较运算符的结合性是从左往右,
    然后 1 <= 4 结果为 True, 然后计算 True <= 3, 由于 True 就是 1, 1 <= 3 应该是 False 才对
    PS: 我是写前端的没怎么写过 Python....

    23 条回复    2021-02-22 10:47:59 +08:00
    Trim21
        1
    Trim21  
       2021-02-21 12:08:33 +08:00 via Android
    但是 python 就是支持这么写…而且也是在范围内比较的
    Trim21
        2
    Trim21  
       2021-02-21 12:09:01 +08:00 via Android
    语言特性如此
    jmc891205
        3
    jmc891205  
       2021-02-21 12:09:33 +08:00 via iPhone
    python 的语法糖
    a op b op c 等价于 a op b and b op c
    McZoden
        4
    McZoden  
       2021-02-21 12:09:56 +08:00
    Python 的语法糖
    deplives
        5
    deplives  
       2021-02-21 12:10:08 +08:00 via iPhone
    语言支持
    YouMoeYi
        6
    YouMoeYi  
    OP
       2021-02-21 12:10:27 +08:00
    写错了 1 <= 3 应该是 True 才对 不知道为啥不能编辑了
    renmu123
        7
    renmu123  
       2021-02-21 12:11:23 +08:00 via Android
    Python 这么写确实是可以了,这种写法只是 a<x&&x<b 的语法糖,具体为什么会这样我是没有深究过
    YouMoeYi
        8
    YouMoeYi  
    OP
       2021-02-21 12:12:25 +08:00
    @Trim21 懂了 我在网上没查到 谢谢了
    silkriver
        9
    silkriver  
       2021-02-21 12:31:22 +08:00
    BingoXuan
        10
    BingoXuan  
       2021-02-21 12:35:35 +08:00
    >>> import dis
    >>> dis.dis(lambda x: 1 <= x <= 3)
    1 0 LOAD_CONST 1 (1)
    2 LOAD_FAST 0 (x)
    4 DUP_TOP
    6 ROT_THREE
    8 COMPARE_OP 1 (<=)
    10 JUMP_IF_FALSE_OR_POP 18
    12 LOAD_CONST 2 (3)
    14 COMPARE_OP 1 (<=)
    16 RETURN_VALUE
    >> 18 ROT_TWO
    20 POP_TOP
    22 RETURN_VALUE

    >>> dis.dis(lambda x: (1 <= x) <= 3)
    1 0 LOAD_CONST 1 (1)
    2 LOAD_FAST 0 (x)
    4 COMPARE_OP 1 (<=)
    6 LOAD_CONST 2 (3)
    8 COMPARE_OP 1 (<=)
    10 RETURN_VALUE


    可能是繼承了 lisp 的特性的語法糖,不斷遞歸 x if compare other 解決的
    zhidian
        11
    zhidian  
       2021-02-21 12:37:30 +08:00
    那你知道为啥 JavaScript 里 1 <= 4 <= 3 是 true 吗?。。。。。。
    codists
        12
    codists  
       2021-02-21 13:39:05 +08:00
    Python 中的比较运算符连用和 JS 中的稍微有点不一样。
    一、Python
    1 <= 4 <= 3 等价于:1 <= 4 and 4 <= 3 。因为 1<=4 是 True,但是 4<=3 是 False,最后 True and False 的比较的结果是 False 。具体可以查看官方的 Python 语言参考手册: https://docs.python.org/3/reference/expressions.html#comparisons
    2 、JS
    1 <= 4 <= 3,1<=4 结果是 true,然后使用 Number()函数将 true 转为 1,接着 1<=3,所以结果为 true 。大佬是 JS 这方面的,我就不啰嗦了。
    lithiumii
        13
    lithiumii  
       2021-02-21 14:02:40 +08:00 via Android
    因为学过小学数学但没学过其他语言编程的普通人类都这样写,所以 py 设计成了这个样子,方便人类理解
    lpts007
        14
    lpts007  
       2021-02-21 14:51:24 +08:00 via Android   ❤️ 4
    我想问一下为什么你妈要学 python
    yaoppp
        15
    yaoppp  
       2021-02-21 15:25:24 +08:00 via iPhone   ❤️ 1
    阿姨的 python 知识比我多
    lizytalk
        16
    lizytalk  
       2021-02-21 15:28:12 +08:00 via iPhone
    python 的语法糖而已
    dinjufen
        17
    dinjufen  
       2021-02-21 15:32:03 +08:00
    阿姨很好学嘛,我妈就爱打麻将🤣
    yangzzzzzzzt1
        19
    yangzzzzzzzt1  
       2021-02-21 16:06:40 +08:00
    @lpts007 qs 别的不想问,只想问下为啥让家长学 python
    susanzhou
        20
    susanzhou  
       2021-02-21 16:53:22 +08:00 via Android
    不是一般的牛,不过程序主要是写给人看的,还是按标准写法写吧,对所有人都好
    stephenyin
        21
    stephenyin  
       2021-02-21 22:00:38 +08:00
    就一句:你妈牛逼
    Zy143L
        22
    Zy143L  
       2021-02-22 00:00:55 +08:00 via Android
    您母亲被 Python 培训洗脑了?😅
    开始卷起来打算抢你饭碗
    jmyz0455
        23
    jmyz0455  
       2021-02-22 10:47:59 +08:00
    @codists JS 的部分,一开始我在想如何证明发生了隐式转换,然后想到了「 1<=4==1 」为 true,感谢你的解惑。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1122 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:50 · PVG 02:50 · LAX 10:50 · JFK 13:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.