Python 条件判断问题 - V2EX
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 3518 次点击
    这是一个创建于 1692 天前的主题,其中的信息可能已经有所发展或是发生改变。

    起因是这样的, 我妈在家无事报了个免费的 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     Solana     5217 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 08:24 PVG 16:24 LAX 01:24 JFK 04:24
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86