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

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

20跟21有什么区别

1b681fee4ab3ab56c1c6c2a9f9e7a363.png

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

循环几次?

6e1dae80462ec3f1413c01d059b84897.png

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

a0e20621728a0b8ffc73a5c005201c0f.png

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

efd228543698df40b932192a6018e9d4.png

嗼嗼嗼,这又是怎么回事?这又引出了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值