1. 程式人生 > >盤點 Python 中的那些冷知識

盤點 Python 中的那些冷知識

1. 省略號也是物件

... 這是省略號,在Python中,一切皆物件。它也不例外。

在 Python 中,它叫做 Ellipsis 。

在 Python 3 中你可以直接寫…來得到這玩意。

>>> ...Ellipsis>>> type(...)<class 'ellipsis'>

而在 2 中沒有…這個語法,只能直接寫Ellipsis來獲取。

>>> EllipsisEllipsis>>> type(Ellipsis)<type 'ellipsis'>>>>

它轉為布林值時為真

>>> bool(...)True

最後,這東西是一個單例。

>>> id(...)4362672336>>> id(...)4362672336

這東西有啥用呢?據說它是Numpy的語法糖,不玩 Numpy 的人,可以說是沒啥用的。

在網上只看到這個 用 ... 代替 pass ,稍微有點用,但又不是必須使用的。

try:    1/0except 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)...01

你是否想過 >>> 和 ... 這兩個提示符也是可以修改的呢?

>>> import sys                      >>> sys.ps1                         '>>> '                              >>> sys.ps2                         '... '                              >>>                                 >>> sys.ps2 = '................'                 >>> sys.ps1 = 'Python程式設計時光>>>'       Python程式設計時光>>>for i in range(2):     ................    print (i)                    ................                                 0                                   1