Python趣味篇:字符串中的趣味瞬间
Posted 五包辣条!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python趣味篇:字符串中的趣味瞬间相关的知识,希望对你有一定的参考价值。
前言
说起Python,可能大多数学过的人都会赞赏它语法简洁明了,可是其实Python也会有许多有意思的瞬间,你真的学会了Python了吗?看看下面几个小问题。 |
目录
1,真假字符串
>>> a = 'python'
>>> b = 'python'
>>> a is b
True
>>> a = 'python!'
>>> b = 'python!'
>>> a is b
False
>>> a = 'python!';b = 'python!'
>>> a is b
True
为什么第一个是两个python判断为True,而第二个加了!以后则判断为False了呢?而第三个怎么又变成True了?
首先我们知道正常来说,如果创建相同的字符串,它会指向已创建的对象,如下图所示。
但是在编译的时候会出现一个隐式驻留的情况:字符串中如果只包含数字,字符和下划线就会被驻留,就不会创建一个新的对象。但是"python!''包含了!所以不被驻留从而需要创建新对象,这个现象有兴趣大家可以去验证一下(使用python解释器)
为什么同一行声明又变成了True呢?因为在同一行操作,解释器能够发现已经创建了该对象’python!',赋值给a,b;如果不在同一行,由于上述原因它则发现不了。
2,真假数字
>>> a = 256
>>> b = 256
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a is b
False
>>> a = 257; b = 257
>>> a is b
True
为什么数字也会出现这种情况呢?我们得了解一个概念叫做预先加载,把要用到的事物先准备好,所谓未雨绸缪就是这个意思。 在启动Python解释器的时候,-5–256的对象就已经预先分配好了内存。所以a ,b在等于256时并没有去创建新对象,而是指向了预先就加载好的256内存地址。
PS:Pycharm预先加载的范围会更大,所以很占内存
而在a,b=257时,由于257是一个新的对象,并且在不同行创建时,会分属各自的代码块整数空间。这个知识点大家可以去看看命名空间,而在同一行创建时,因为属于同一空间不会额外创建。
3,看不见的幽灵字符串?
>>> "aabb".count("a")
2
>>> "aabb".count("b")
2
>>> "aabb".count("")
5
wtf? 为什么会有5的计数?这是什么?
其实这是因为字符串之间是有缝隙的,而这个5就是5个缝隙“”,它们拼接起了每个字符串。
以上是关于Python趣味篇:字符串中的趣味瞬间的主要内容,如果未能解决你的问题,请参考以下文章
Python趣味入门02: 妥妥地安装配置Python(Windows版)