小明在日常 Code 中遇到一些好玩, 冷门的事情, 通常都会记录下来.
现在已经积攒了一些了, 最近打算整理一波, 发出来给大家补补. 一篇只分享五个, 有时间了就整理. 不想错过的, 千万记得关注一下.
1. 省略号也是对象
... 这是省略号, 在 Python 中, 一切皆对象. 它也不例外.
在 Python 中, 它叫做 Ellipsis .
在 Python 3 中你可以直接写... 来得到这玩意.
- >>> ...
- Ellipsis
- >>> type(...)
- <class 'ellipsis'>
而在 2 中没有... 这个语法, 只能直接写 Ellipsis 来获取.
- >>> Ellipsis
- Ellipsis
- >>> type(Ellipsis)
- <type 'ellipsis'>
- >>>
它转为布尔值时为真
- >>> bool(...)
- True
最后, 这东西是一个单例.
- >>> id(...)
- 4362672336
- >>> id(...)
- 4362672336
这东西有啥用呢? 据说它是 Numpy 的语法糖, 不玩 Numpy 的人, 可以说是没啥用的.
在网上只看到这个 用 ... 代替 pass , 稍微有点用, 但又不是必须使用的.
- try:
- 1/0
- except ZeroDivisionError:
- ...
2. 类首字母不一定是大写
在正常情况下, 我们所编写的所见到的代码, 好像都默许了类名首字母大写, 而实例用小写的这一准则. 但这并不是强制性的, 即使你反过来的也没有关系.
但有一些内置的类, 首字母都是小写, 而实例都是大写.
比如 bool 是类名, 而 True,False 是其实例;
比如 ellipsis 是类名, Ellipsis 是实例;
还有 int,string,float,list,tuple,dict 等一系列数据类型都是类名, 它们都是小写.
3. 增量赋值的性能更好
诸如 += 和 *= 这些运算符, 叫做 增量赋值运算符.
这里使用用 += 举例, 以下两种写法, 在效果上是等价的.
- # 第一种
- a = 1 ; a += 1
- # 第二种
- a = 1; a = a + 1
+= 其背后使用的魔法方法是 __iadd__, 如果没有实现这个方法则会退而求其次, 使用 __add__ .
这两种写法有什么区别呢?
用列表举例 a += b, 使用 __iadd__ 的话就像是使用了 a.extend(b), 如果使用 __add__ 的话, 则是 a = a+b, 前者是直接在原列表上进行扩展, 而后者是先从原列表中取出值, 在一个新的列表中进行扩展, 然后再将新的列表对象返回给变量, 显然后者的消耗要大些.
所以在能使用增量赋值的时候尽量使用它.
4. and 和 or 的取值顺序
and 和 or 是我们再熟悉不过的两个逻辑运算符. 而我们通常只用它来做判断, 很少用它来取值.
如果一个 or 表达式中所有值都为真, Python 会选择第一个值, 而 and 表达式则会选择第二个.
- >>>(2 or 3) * (5 and 7)
- 14 # 2*7
5. 如何修改解释器提示符
这个当做今天的一个小彩蛋吧. 应该算是比较冷门的, 估计知道的人很少了吧.
正常情况下, 我们在 终端下 执行 Python 命令是这样的.
- >>> for i in range(2):
- ... print (i)
- ...
- 0
- 1
你是否想过 >>> 和 ... 这两个提示符也是可以修改的呢?
- >>> import sys
- >>> sys.ps1
- '>>>'
- >>> sys.ps2
- '...'
- >>>
- >>> sys.ps2 = '................'
- >>> sys.ps1 = 'Python 编程时光 >>>'
Python 编程时光 >>>for i in range(2):
- ................ print (i)
- ................
- 0
- 1
小明会继续坚持写这个系列, 如果你觉得写得还可以的, 不防关注一下, 以免掉队, 如果可以的话, 请分享给身边的小伙伴们.
来源: https://www.cnblogs.com/wongbingming/p/9393186.html