Python有趣时刻,这些代码让你大呼"怎么会这样"

yumo66623小时前技术文章5

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


20跟21有什么区别



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


循环几次?



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



循环了4次,所以i=10这个语句完全没用了吗?是的,这跟Python的for循环的机制有关,每次在循环体之前,下一个需要的值先会产生好然后赋值给循环变量,这里的i。也就是说,虽然循环体中有一个i = 10,但下次循环前for又会做一个i=2或者i=3的操作,把i=10覆盖了。



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


www.kudingmao.com

相关文章

少儿编程学习Python这三本书就够了,入门到精通,8岁即可入手

最近有一些家长留言想让孩子学习Python让郭老师推荐书籍发现各种Python书籍一大堆不推荐:原因:1、书籍不是针对青少年使用。(根本看不懂)2、这些书籍无法让孩子参加考级。本期分享Python学习...

少儿学编程系列---使用python turtle画熊猫

turtle简介Turtle库是Python语言中一个很流行的绘制图像的函数库,利用它可以绘制图形,非常适合于引导少儿学习编程。常用绘图命令绘图有着许多的命令,这些命令可以划分为3种:运动命令,画笔控...

少儿编程课是智商税吗?深扒编程猫等4家编程课,给你们4点忠告

最近身边很多家长开始谈论起来要不要给孩子报编程课,看到别人都报了,不想让自己的孩子落后,但是对编程课一点也不了解,不知道为什么要学习编程课?难道是以后让孩子当程序员吗?其实我跟很多家长都有同样的疑惑,...

python少儿编程:鸡兔同笼算法

for ji in range(1,35,1): if (ji*2+(35-ji)*4)==94: print("鸡的只数为:",ji) print("兔的只数为:",...

Python少儿编程:序列和随机数(240820)

今天介绍另一种从指定的数字中随机选择的常见方法。当我们需要模拟掷骰子的结果时,按照上节课的方式,我们可以选择从[1,6](这是数学的表示方法,即表示从数字1到6,包含1和6)的范围内随机生成一个数字,...

Python少儿编程:for循环(240827)

看着快开学了,上周末带着孩子在九宫山玩了两天,省内自驾游,慢悠悠的还挺惬意。今天咱们就进入蓝桥青少Python等级考试的7级了。翻了翻真题,主要是for循环的相关知识点。回想过往教孩子的时候,循环真的...