记python 链式比较的坑
2024-09-07 10:42:37
前两天,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
好吧~~~~~~~
最新文章
- Table 表单样式
- 如何实现textarea中获取动态剩余字数的实现
- SEO优化
- 9、FTP封杀用户、限制传输速率、限制访问目录、为匿名用户提供下载资源
- LoadRunner中响应时间与事物时间详解
- C# - Dbhelp
- DataGridView之行的展开与收缩
- 根据ip地址从第三方接口获取详细的地理位置
- javabean以及内省技术详解(转)
- 跨平台渲染框架尝试 - Texture管理
- 简单的Socket通信
- 小明滚出---响应对象HttpServletResponse和请求对象HttpServletRequest实例
- FJUT2017寒假训练二题解
- python爬虫,使用urllib2库报错
- numpy.loadtxt()
- Oracle 所有字典
- 模型评估——ROC、KS
- OneAPM大讲堂 | Java 异常日志记录最佳实践
- Graphql 相关 strapi -- Koa2
- Chapter 5 -- ImmutableCollections