跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Python 条件判断问题
未分類
20 2 月 2021

Python 条件判断问题

Python 条件判断问题

資深大佬 : YouMoeYi 1

起因是这样的, 我妈在家无事报了个免费的 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)

  • 資深大佬 : Trim21

    但是 python 就是支持这么写…而且也是在范围内比较的

  • 資深大佬 : Trim21

    语言特性如此

  • 資深大佬 : jmc891205

    python 的语法糖
    a op b op c 等价于 a op b and b op c

  • 資深大佬 : McZoden

    Python 的语法糖

  • 資深大佬 : deplives

    语言支持

  • 主 資深大佬 : YouMoeYi

    写错了 1 <= 3 应该是 True 才对 不知道为啥不能编辑了

  • 資深大佬 : renmu123

    Python 这么写确实是可以了,这种写法只是 a<x&&x<b 的语法糖,具体为什么会这样我是没有深究过

  • 主 資深大佬 : YouMoeYi

    @Trim21 懂了 我在网上没查到 谢谢了

  • 資深大佬 : silkriver

    官方文档里有写 https://docs.python.org/zh-cn/3/reference/expressions.html#comparisons

  • 資深大佬 : BingoXuan

    >>> 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

    那你知道为啥 JavaScript 里 1 <= 4 <= 3 是 true 吗?。。。。。。

  • 資深大佬 : codists

    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

    因为学过小学数学但没学过其他语言编程的普通人类都这样写,所以 py 设计成了这个样子,方便人类理解

  • 資深大佬 : lpts007

    我想问一下为什么你妈要学 python

  • 資深大佬 : yaoppp

    阿姨的 python 知识比我多

  • 資深大佬 : lizytalk

    python 的语法糖而已

  • 資深大佬 : dinjufen

    阿姨很好学嘛,我妈就爱打麻将

  • 資深大佬 : freakxx

    https://docs.python.org/3/reference/expressions.html#membership-test-operations

    https://github.com/satwikkansal/wtfpython#-be-careful-with-chained-operations

    参考这两个链接

  • 資深大佬 : yangzzzzzzzt1

    @lpts007 qs 别的不想问,只想问下为啥让家长学 python

  • 資深大佬 : susanzhou

    不是一般的牛,不过程序主要是写给人看的,还是按标准写法写吧,对所有人都好

  • 資深大佬 : stephenyin

    就一句:你妈牛逼

  • 資深大佬 : Zy143L

    您母亲被 Python 培训洗脑了?

  • 資深大佬 : jmyz0455

    @codists JS 的部分,一开始我在想如何证明发生了隐式转换,然后想到了「 1<=4==1 」为 true,感谢你的解惑。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具