记python 链式比较的坑
前两天,python交流群里有人问:
“x”<"y"==True
这个表达式输出的是什么,脑子都没动,就觉得应该是True
居然被否定了!立马在命令行里敲了一下,准备用事实打对方脸。
But,是我的脸被打了,命令行给了我一个大大的False!!

这。。。。。。。。。。。。。。
'x'<'y'==True不就是('x'<'y')==True么??我哪里错了!
都不知道怎么去网上查去了!
幸亏最近学了一个新模块,dis
立马拿来强行装b.upper()
dis模块可以把python内容,转成字节码,也就是能看具体的底层动作
import dis
dis.dis("'x'<'y'==True") dis.dis("('x'<'y')==True")
1.先来看下('x'<'y')==True"的dis反编译

1)加载x到栈,
2)加载y到栈,
3)进行比较操作
4)加载True到栈
5)进行比较操作
6)返回比较结果
感觉就应该是这样子么!
2.再来看看'x'<'y'==True的反编译
就是框起来的这两个段造的孽

1)加载x到栈
2)加载y到栈
3)DUP_TOP,这是什么神仙操作?
查了一下手册:Duplicates the reference on top of the stack.复制堆栈顶部的引用。
所以,此时栈内数据是x|y|y(左边是栈底;栈底是x,栈顶是刚刚复制的那个y)
4)ROT_THREE 把栈内第二和第三位置的值,向栈顶推一个位置,原栈顶移到第三的位置
也就是此时栈内数据是y|x|y(左边是栈底;栈底是之前复制的那个y,栈顶是2)压入的y)
5)栈顶的x和y进行比较操作
6)跳转判断
7)加载True
8)栈顶的两个值进行‘==‘判断,也就是‘y’和True
这怎么可能相等?!!!
也就是说,python里边的‘x’<'y'==True 等价于 'x'<'y' and 'y'==True
好吧~~~~~~~
记python 链式比较的坑的更多相关文章
- Python 笔试集(1):关于 Python 链式赋值的坑
前言 Python 的链式赋值是一种简易型批量赋值语句,一行代码即可为多个变量同时进行赋值. 例如: x = y = z = 1 链式赋值是一种非常优雅的赋值方式,简单.高效且实用.但同时它也是一个危 ...
- Python链式赋值执行顺序及执行方式的证明
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在<关于Python链式赋值的赋值顺序问题& ...
- [Python]解决python链式extend的技巧
众所周知python中的list是可以extend的,功能 旨在将两个list合并成一个.譬如[1,2,3].extend([4,5,6])=[1,2,3,4,5,6] 假如有一个list的list, ...
- python链式对比
参考 https://www.cnblogs.com/shanghongyun/p/10519579.html 为什么Python中“2==2>1”结果为True在Python中,你可能会发现这 ...
- 由反转链表想到python链式交换变量
这两天在刷题,看到链表的反转,在翻解体思路时看到有位同学写出循环中一句搞定三个变量的交换时觉得挺6的,一般用的时候都是两个变量交换(a,b=b,a),这种三个变量的交换还真不敢随便用,而且这三个变量都 ...
- 关于Python链式赋值的赋值顺序问题
在<第4.7节 Python特色的序列解包.链式赋值.链式比较>一文中,老猿这样介绍的: 链式赋值是用一行语句将多个变量赋值为同一个值,语法如下: 变量1=变量2=变量n=赋值表达式 该语 ...
- thinkphp5.1中使用链式操作的坑
1.在进行tp5->tp5.1的时候,没有想太多,直接使用之前的代码:结果在该操作中,多次调用该get方法,tp5.1的链式操作一直保持了之前的搜索条件,截图如下:(具体的代码没有展示) 2.然 ...
- python链式调用REST API把参数放到URL中
需求格式:GET /users/:user/repos 程序: class Chain(object): def __init__(self,path=''): self._path=path def ...
- Javascript、C#、php、asp、python 等语言的链式操作的实现
一.什么是链式操作 把需要的下一步操作的对象通过上一步操作返回回来.使完成某些功能具有持续性. 二.链式操作优点 代码更精简优雅.链式操作能大大精简代码量,多项操作一行代码一气呵成,搞定: 链式操作应 ...
随机推荐
- Web安全相关(一):CSRF/XSRF(跨站请求伪造)和XSS(跨站脚本)
XSS(Cross Site Script):跨站脚本,也就是javascript脚本注入,一般在站点中的富文本框,里面发表文章,留言等表单,这种表单一般是写入数据库,然后再某个页面打开. 防御: 1 ...
- 【春招】 java static 执行顺序
package static类型.执行顺序; public class Test { Person person = new Person("Test"); static{ Sys ...
- react-native app 屏幕适配方案(按照设计稿像素大小写就行)
import React, { Component,PropTypes } from 'react'; import { Dimensions,PixelRatio,Platform,StatusBa ...
- Java自学路线图之Java框架自学
Java自学路线图的框架分为两个阶段,第一阶段的Java框架包含六个内容:MyBatis,Spring,SpringMVC,Maven高级,Git,Dubbo. 在Java自学过程中掌握框架的使用,对 ...
- 原生的ajax,get post请求需要注意的地方
1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...
- Day1T3小w的魔术扑克——图论
为什么不搞\(T2\)??? 因为我太菜了,那题我是真的搞不出来 题目描述 链接:https://ac.nowcoder.com/acm/contest/1100/C 来源:牛客网 小\(w\)喜欢打 ...
- 原来rollup这么简单之 rollup.generate + rollup.write篇
大家好,我是小雨小雨,致力于分享有趣的.实用的技术文章. 内容分为翻译和原创,如果有问题,欢迎随时评论或私信,希望和大家一起进步. 分享不易,希望能够得到大家的支持和关注. 计划 rollup系列打算 ...
- Iconfont-阿里巴巴矢量图标库 登录账户是 github自动登录
Iconfont-阿里巴巴矢量图标库 登录账户是 github自动登录
- redis 主从同步&哨兵模式&codis
主从同步 1.CPA原理 1. CPA原理是分布式存储理论的基石: C(一致性): A(可用性): P(分区容忍性); 2. 当主从网络无法连通时,修改操作无法同步到节点,所以“一致性”无法满足 ...
- rabbitmq系列(四)死信队列
一.什么是死信队列 当消息在一个队列中变成一个死信之后,它将被重新publish到另一个交换机上,这个交换机我们就叫做死信交换机,私信交换机将死信投递到一个队列上就是死信队列.具体原理如下图: 消息变 ...