日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 覆盖list_【Python妙招】gt;gt;gt;看腻了能不能换成别的啊……当然可以啦:)...

發(fā)布時間:2024/9/27 python 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 覆盖list_【Python妙招】gt;gt;gt;看腻了能不能换成别的啊……当然可以啦:)... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文作者:站在兩個世界邊緣? & 小象

編輯:VL

今天給大家介紹幾個Python里(可能沒那么廣為人知的)小知識,希望能給大家?guī)韼椭?#xff0c;讓編程更有樂趣。

1.如何修改解釋器提示符

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

>>>?for?i?in?range(2):...?????print?(i)...01

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

sys.ps1?sys.ps2?是指定解釋器的主要和輔助提示的字符串。僅在解釋器處于交互模式時才定義這些。在這種情況下,它們的初始值是和。如果將非字符串對象分配給任一變量,則每次解釋器準備讀取新的交互式命令時都會重新評估該變量。這可以用來實現(xiàn)動態(tài)提示。’>>> ”… ‘str()

>>>?import?sys??????????????????????>>>?sys.ps1????????????????????????? >>>? ??????????????????????????????>>>?sys.ps2????????????????????????? ...? ??????????????????????????????>>>?????????????????????????????????
>>>?sys.ps2?=? ................ ?????????????????>>>?sys.ps1?=? Python編程時光>>> ???????
Python編程時光>>>for?i?in?range(2):?????
................????print?(i)????????????????????
................?????????????????????????????????0???????????????????????????????????1?????????

2. 類首字母不一定是大寫

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

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

比如?bool?是類名,而?True,False?是其實例;
比如?ellipsis?是類名,Ellipsis是實例;
還有?int,string,float,list,tuple,dict?等一系列數(shù)據(jù)類型都是類名,它們都是小寫。

3. 增量賦值的性能更好

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

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

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

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

這兩種寫法有什么區(qū)別呢?

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

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

4. and 和 or 的取值順序

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

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

5. 省略號也是對象

...?這是省略號,在Python中,一切皆對象。它也不例外。

在?Python?中,它叫做?Ellipsis?。

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

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

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

>>>?Ellipsis
Ellipsis>>>?type(Ellipsis) ellipsis >>>>

它轉(zhuǎn)為布爾值時為真

>>>?bool(...)
True

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

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

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

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

try:1/0except?ZeroDivisionError:
????...

6. 默認參數(shù)最好不為可變對象

函數(shù)的參數(shù)分三種

  • 可變參數(shù)

  • 默認參數(shù)

  • 關(guān)鍵字參數(shù)

這里要說的是傳遞默認參數(shù)時,新手很容易踩雷的一個坑。

先來看一個示例

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 ]

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

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

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

07. 訪問類中的私有方法

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

這里先看一下例子

class?Kls():def?public(self):
????????print( Hello?public?world! )def?__private(self):
????????print( Hello?private?world! )def?call_private(self):self.__private()
ins?=?Kls()#?調(diào)用公有方法,沒問題
ins.public()#?直接調(diào)用私有方法,不行
ins.__private()#?但你可以通過內(nèi)部公有方法,進行代理
ins.call_private()

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

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

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

08. 時有時無的切片異常

這是個簡單例子

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

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

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???

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

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

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

09. 哪些情況下不需要續(xù)行符

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

為了實現(xiàn)高可讀性的代碼,我們常常使用到的就是續(xù)行符?。

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

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

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

>>>?my_list=[1,2,3,
...??????????4,5,6]>>>?my_tuple=(1,2,3,
...???????????4,5,6)>>>?my_dict={"name":?"MING",
...??????????"gender":?"male"}

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

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

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

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

  • 類,和函數(shù)的定義。

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

10. Py2 也可以使用 print()

我相信應(yīng)該有不少人,思維定式,覺得只有?Py3?才可以使用?print(),而?Py2?只能使用print? ?。

今天,小明要為?Py2?正名一次。

在Python 2.6之前,只支持

print?"hello"

在Python 2.6和2.7中,可以支持如下三種

print?"hello"
print("hello")print?("hello")

在Python3.x中,可以支持如下兩種

print("hello")print?("hello")

▼往期精彩回顧▼【Python應(yīng)用】素質(zhì)自動修正-thef***為什么要學編程?讓她們給你答案……【Python妙招】如何去除Django警告信息

總結(jié)

以上是生活随笔為你收集整理的python 覆盖list_【Python妙招】gt;gt;gt;看腻了能不能换成别的啊……当然可以啦:)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。