亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python冷知識

發布時間:2020-09-25 09:05:56 來源:億速云 閱讀:156 作者:Leah 欄目:編程語言

Python冷知識?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

省略號也是對象

... 這是省略號,在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 的人,可以說是沒啥用的。

類首字母不一定大寫

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

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

比如 bool 是類名,而 True,False 是其實例;

比如 ellipsis 是類名,Ellipsis是實例;

還有 int,string,float,list,tuple,dict 等一系列數據類型都是類名,它們都是小寫。

增量賦值的性能更好

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

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

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

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

and和or的取值順序

and 和 or 是我們再熟悉不過的兩個邏輯運算符。而我們通常只用它來做判斷,很少用它來取值。

如果一個or表達式中所有值都為真,Python會選擇第一個值,而and表達式則會選擇第二個。

如何修改解釋器提示符

這個當做今天的一個小彩蛋吧。應該算是比較冷門的,估計知道的人很少了吧。

正常情況下,我們在 終端下 執行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

默認參數最好為不可變對象

函數的參數分三種

可變參數

默認參數

關鍵字參數

這三者的具體區別,和使用方法在 廖雪峰的教程 里會詳細的解釋。這里就不搬運了。

今天要說的是,傳遞默認參數時,新手很容易踩雷的一個坑。

先來看一個示例

def func(item, item_list=[]):
    item_list.append(item)
    print(item_list)

func( iphone )
func( xiaomi , item_list=[ oppo , vivo ])
func( huawei )

在這里,你可以暫停一下,思考一下會輸出什么?

思考過后,你的答案是否和下面的一致呢

[ iphone ]
[ oppo ,  vivo ,  xiaomi ]
[ iphone ,  huawei ]

如果是,那你可以跳過這部分內容,如果不是,請接著往下看,這里來分析一下。

Python 中的 def 語句在每次執行的時候都初始化一個函數對象,這個函數對象就是我們要調用的函數,可以把它當成一個一般的對象,只不過這個對象擁有一個可執行的方法和部分屬性。

對于參數中提供了初始值的參數,由于 Python 中的函數參數傳遞的是對象,也可以認為是傳地址,在第一次初始化 def 的時候,會先生成這個可變對象的內存地址,然后將這個默認參數 item_list 會與這個內存地址綁定。在后面的函數調用中,如果調用方指定了新的默認值,就會將原來的默認值覆蓋。如果調用方沒有指定新的默認值,那就會使用原來的默認值。

訪問類中的私有方法

大家都知道,類中可供直接調用的方法,只有公有方法(protected類型的方法也可以,但是不建議)。也就是說,類的私有方法是無法直接調用的。

這里先看一下例子

class Kls():
    def public(self):
        print( Hello public world! )

    def __private(self):
        print( Hello private world! )

    def call_private(self):
        self.__private()

ins = Kls()

# 調用公有方法,沒問題
ins.public()

# 直接調用私有方法,不行
ins.__private()

# 但你可以通過內部公有方法,進行代理
ins.call_private()

既然都是方法,那我們真的沒有方法可以直接調用嗎?

當然有啦,只是建議你千萬不要這樣弄,這里只是普及,讓你了解一下。

# 調用私有方法,以下兩種等價
ins._Kls__private()
ins.call_private()

時有時無的切片異常

這是個簡單例子

my_list = [1, 2, 3, 4, 5]
print(my_list[5])

執行一下,和我們預期的一樣,會拋出索引異常。

Traceback (most recent call last):
  File "F:/Python Script/test.py", line 2, in <module>
    print(my_list[5])
IndexError: list index out of range

但是今天要說的肯定不是這個,而是一個你可能會不知道的冷知識。

來看看,如下這種寫法就不會報索引異常,執行my_list[5:],會返回一個新list:[]。

my_list = [1, 2, 3]
print(my_list[5:])

哪些情況不需要換行符

在寫代碼時,為了代碼的可讀性,代碼的排版是尤為重要的。

為了實現高可讀性的代碼,我們常常使用到的就是續行符 。

>>> a =  talk is cheap, 
...      show me the code. 
>>>
>>> print(a)
talk is cheap,show me the code.

那有些情況下,是不需要寫續行符的呢?

經過總結,在這些符號中間的代碼換行可以省略掉續行符:[],(),{}

>>> my_list=[1,2,3,
...          4,5,6]

>>> my_tuple=(1,2,3,
...           4,5,6)

>>> my_dict={"name": "MING",
...          "gender": "male"}

另外還有,在多行文本注釋中   ,續行符也是可以不寫的。

>>> text =    talk is cheap,
...           show me the code

上面只舉了一些簡單的例子。

但你要學會舉一反三。一樣的,在以下這些場景也同樣適用

類,和函數的定義。

列表推導式,字典推導式,集合推導式,生成器表達式

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

娄底市| 黎城县| 赣州市| 政和县| 闽侯县| 铜川市| 资兴市| 呼和浩特市| 张家界市| 龙岩市| 万宁市| 左贡县| 天镇县| 舟山市| 南康市| 花垣县| 临清市| 翁源县| 北碚区| 樟树市| 南召县| 梅河口市| 尚义县| 肃宁县| 米易县| 黄梅县| 奉化市| 出国| 桑植县| 海城市| 开远市| 余干县| 腾冲县| 南陵县| 合川市| 梅河口市| 红河县| 调兵山市| 汶川县| 邯郸县| 罗田县|