Python是一门清晰易学的语言,可是这不代表我们Python没有黑暗料理,下面我就挑选了几个能让你大呼"我勒个去,怎么会这样"的程序,这些例子不光有趣,也能够加深我们对于Python细节的理解,看看你自己能不能解释吧。

本文取材于下面这个GitHub repository。

【github.com/satwikkansal/wtfpython】自己在前面加HTTP

以下代码如果不信请手动尝试,测试环境:Python 3.6

20跟21有什么区别

第一次看到这个例子的时候我的心里面充满了wtf,20跟21有什么区别为什么结果不一样?原因是,python在进行内部优化的时候会做常量替换的操作,也就是把 'a' * 20这种语句替换成'aaaaaaaaaaaaaaaaaaaa',这样运行的时候节省时间,而刚好,小于等于20的时候会做这个优化,而大于20就不做这个优化了。。。

让一个函数Return两次

一般的Python教程会告诉你,当函数执行到第一个return的时候会退出,剩下的语句不再执行。然而如果是这样的话上面的代码中我们的somefunc()应该返回的是'from_try',但结果却不是。这个现象的原因是finally后面的语句永远会执行,而函数的返回值由最后一个return语句决定,所以函数的返回值是finally语句中的返回值。

循环几次?

你猜下面的代码会循环几次

有些同学可能会猜只会循环一次,然后正确的输出是

循环了4次,所以i=10这个语句完全没用了吗?是的,这跟Python的for循环的机制有关,每次在循环体之前,下一个需要的值先会产生好然后赋值给循环变量,这里的i。也就是说,虽然循环体中有一个i = 10,但下次循环前for又会做一个i=2或者i=3的操作,把i=10覆盖了。如果大家对Python感兴趣的话,可以加一下我的威信哦:abb436574,免费领取一套学习资料和视频课程哟~

一石三鸟

现在我们赋个值给第一个元素,再看看结果

What?为什么有三个元素都变成了X,我们明明值赋了一个值啊?这是因为[row] * 3这个操作实际上没有复制row,而只是创建了三个object reference,也就是board[0] board[1] board[2]这三个元素其实指向了同一个列表row,那么改变board[0][0]其实就是改变row[0],也同时改变了board[1][0] board[2][0]。

又是数字,256和257有什么区别?

论捐嗼,这又是怎么回事?这又引出了Python另一个优化机制,在解释器开始的时候,会初始化-5到256这些数字,因为这些数字是常用的。所以a=256实际上是把a指向了已经创建好的256,b也同理。而257并没有预先创建好,每一行的代码在解释器里面又是单独优化的,所以写b=257的时候解释器不知道已经有了一个257,又新建了一个,因此他们俩指向不同的object。但当在一行里面同时给a b赋值为257的时候,解释器优化知道这点,就只创建了一个257,所以a is b又是True了。补充说明一下,这个现象只存在于repl交互执行当中,如果你把这些语句写在一个文件里面运行,那么编译器会一起优化,所有的结果都是True了。

总有些代码会让你大呼“我勒个去,怎么会这样子“相关推荐

  1. 女朋友发的微信消息撤回了,python一串代码,让你大呼过瘾

    想查看微信好友撤回的消息?Python帮你搞 要说微信最让人恶心的发明,消息撤回绝对能上榜. 比如你现在正和女朋友用微信聊着天,或者跟自己喜欢的女孩子聊着天,一个不留神,你没注意到对方发的消息就被她及 ...

  2. 双十一,你买了哪些大呼过瘾的编程书?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 一年一度的双十一悄然过去,这几天几乎身边每个人都在谈论着 ...

  3. 有史以来最受推崇的编程书有哪些?相信你看过后一定会大呼过瘾!

    作者:人民邮电出版社 链接:https://www.zhihu.com/question/50408698/answer/1154160248 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权 ...

  4. 知乎高赞:有哪些你看了以后大呼过瘾的数据分析书?

    最近在知乎上发现一个热门话题--有哪些你看了以后大呼过瘾的数据分析书?3万多人关注了该问题,被浏览251W+次. 市面上很多数据分析类的书籍,90%的内容都可以在互联网上搜到.相比较,一些聚焦各行业的 ...

  5. 爷青回!最近很火的朋友圈怀旧小电视源码来啦!看到最后一个视频我大呼好家伙!

    原文首发于公众号:[golang小白成长记] 爷青回!最近很火的朋友圈怀旧小电视源码来啦!看到最后一个视频我大呼好家伙! 体验一把怀旧小电视 最近朋友圈被怀旧小电视刷爆啦! 点开来,是一台老式电视机! ...

  6. 周芷若要练“九阴白骨爪”,程序员大呼:万万不可!

         作者:年素清      来源:码农故事汇   码农故事汇,讲述码农的真实人生 01 码农故事汇  "宝刀屠龙,号令天下:倚天不出,谁与争锋." 相信看过<倚天屠龙记 ...

  7. spring5高级编程_我也来推荐一波你看了以后大呼过瘾的编程书

    今天在网站上看到有一个问答特别火,那就是有哪些有哪些你看了以后大呼过瘾的编程书? 看到好多人的问答都被推荐的几百.我今天也来回答一下这个问题. 先给大家分享一下怎样学习任何一种编程语言,然后再给大家推 ...

  8. spring5高级编程_有哪些你看了以后大呼过瘾的编程书?

    今天在网站上看到有一个问答特别火,那就是有哪些有哪些你看了以后大呼过瘾的编程书? 看到好多人的问答都被推荐的几百.我今天也来回答一下这个问题. 先给大家分享一下怎样学习任何一种编程语言,然后再给大家推 ...

  9. 低代码平台选型6大能力:品牌/产品/技术/服务/安全/价值

    关于低代码平台的选型,我个人认为主要还是看这6大能力:品牌.产品.技术.服务.安全.价值.下面以3家低代码开发平台为例,来一一展开讲解. 一.低代码平台选型-织信Informat 1.品牌能力 深圳基 ...

最新文章

  1. 金融业加速智能化,解析360金融AI基础架构和应用
  2. Python matplotlib可视化:用Matplotlib的bar_label函数自定义条形图的数值标签、用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的中部)
  3. 【 FPGA 】FIR 滤波器之内插 FIR 滤波器(Interpolated FIR Filter)
  4. 使用Spring Security 资源服务器来保护Spring Cloud 微服务
  5. Linux下对于inode的理解
  6. Webservice开发之xsd中开发请求数据的响应接口
  7. lisp不是函授型语言_【神奇的函数式编程语言的独特功能】Lisp 的运行期修改、编译代码,并替换当前运行版本的试验...
  8. java 排名相同_Java程序员十年面试经验,助你成为offer收割机
  9. centos安装libconfig
  10. 手机沙盒隔离软件_Windows 这 5 个自带功能就很好用,你可以少装几个第三方软件了...
  11. 虚拟机服务器断网,Vmware虚拟机断网不能上网的解决方法教程[多图]
  12. mysql foxpro_|DBSync for FoxPro and MySQL(数据库同步工具)下载v4.7.1免费版 - 欧普软件下载...
  13. 【时间序列】时间序列数据的缺失填补方法总结
  14. Angular 1 实现多标签页效果
  15. 短期不看好 KotLin 原因
  16. rabbit 消息丢失
  17. 中国平安上半年归母净利润976.76亿元,同比增长68.1%
  18. 如何用火狐浏览器firefox模拟手机浏览器客户端
  19. VirtualBox 安装增强功能失败 解决方法
  20. 机器人兴趣班奖状_拼音兴趣班奖状导师寄语

热门文章

  1. 什么样的企业适合建设中台
  2. 中国游戏行业观察报告
  3. 分支和循环结构的应用(习题)
  4. php限制ip访问次数 并发_PHP实现redis限制单ip、单用户的访问次数功能示例
  5. 作者:郭雷风,中国农业科学院农业信息研究所助理研究员。
  6. 【数字逻辑设计】判断二进制加法溢出的电路设计
  7. 【计算机网络】周知端口号列表
  8. 小学数学N合一(洛谷P2433题题解,Java语言描述)
  9. 【CHM】.chm文件无法正常显示的解决方案
  10. 交替领先的赛跑(洛谷P1568题题解,Java语言描述)