Python的冷知識

Winter發表於2019-10-14

之前看到一個文章,講的是一些關於Python的冷知識,有興趣的可以看一下喲~

省略號也是物件

在Python中,一切皆物件, ...也不例外。在Python3中 ...叫做Ellipsis。

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

而在python2中沒有 這個語法。只能直接使用Ellipsis來獲取:

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

它轉為布林值時為真:

>>> bool(...)
True

那麼這個 ...到底有什麼用呢,據說它是Numpy的語法糖,不使用Numpy的人可以說是沒什麼用了。
或者你可以使用 … 代替 pass ,如:

def test():
    pass
# 可以替換成
def test():
    ...

類首字母不一定是大寫

在正常情況下,我們所編寫的所見到的程式碼,好像都默許了類名首字母大寫,而例項用小寫的這一準則。但這並不是強制性的,即使你反過來的也沒有關係。

但有一些內建的類,首字母都是小寫,而例項都是大寫。

比如 bool 是類名,而 True,False 是其例項;
比如 ellipsis 是類名,Ellipsis是例項;
還有 int,string,float,list,tuple,dict 等一系列資料型別都是類名,它們都是小寫。

增量賦值的效能更好

諸如 +=*= 這些運算子,叫做增量賦值運算子。

這裡使用用 += 舉例,以下兩種寫法,在效果上是等價的。

# 第一種
a = 1 ; a += 1
# 第二種
a = 1; a = a + 1

+= 其背後使用的魔法方法是 __iadd__,如果沒有實現這個方法則會退而求其次,使用 __add__

這兩種寫法有什麼區別呢?

用列表舉例 a += b,使用 __iadd__ 的話就像是使用了a.extend(b),如果使用 __add__ 的話,則是 a = a+b,前者是直接在原列表上進行擴充套件,而後者是先從原列表中取出值,在一個新的列表中進行擴充套件,然後再將新的列表物件返回給變數,顯然後者的消耗要大些。

所以在能使用增量賦值的時候儘量使用它。

and 和 or 的取值順序

and 和 or 是我們再熟悉不過的兩個邏輯運算子。而我們通常只用它來做判斷,很少用它來取值。
如果一個or表示式中所有值都為真,Python會選擇第一個值,而and表示式則會選擇第二個。

>>>(1 or 10) * (2 and 5)
5  # 1*5

如何修改直譯器提示符

正常情況下,我們在終端下執行Python 命令是這樣的。

>>> for i in range(3):
...     print (i)
...
1
2

其實 >>>... 這兩個提示符也是可以修改:

>>> import sys                      
>>> sys.ps1                         
'>>> '                              
>>> sys.ps2                         
'... '                              
>>>                                 
>>> sys.ps2 = '................'                 
>>> sys.ps1 = 'aaa>>>'       
aaa>>>for i in range(3):     
................    print (i)                    
................                                 
0                                   
1  
2

參考: https://www.cnblogs.com/wongbingming/p/9393186.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908432/viewspace-2659910/,如需轉載,請註明出處,否則將追究法律責任。

相關文章