前两天,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

好吧~~~~~~~

最新文章

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

热门文章

  1. Vue Snackbar 消息条队列显示,依次动画消失的实现
  2. springboot项目中thymeleaf布局应用
  3. C++ 动态创建链表
  4. Git&amp;sourceTree软件安装、使用说明及遇到问题解决
  5. IPFS(星际文件系统)-初步接触
  6. js Array方法总结
  7. textareaCenter 未完结 其实就是iview的textarea的从写一遍 需求是光标上下居中
  8. sql优化,如何将in换为exists
  9. linux入门系列18--Web服务之Apache服务2
  10. 太赞了!阿里几位工程师重写了 《Java 并发编程》