最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Python這些冷門(mén)特性,當(dāng)初也沒(méi)教啊

2023-10-16 10:41 作者:啥都會(huì)一點(diǎn)的研究生  | 我要投稿

本期整理了Python中幾個(gè)冷門(mén)甚至奇特但又一直存在的特性,一起看看吧

for-else

if-else想必所有人都知道用來(lái)處理?xiàng)l件判斷,但Python中還有個(gè)for-else

names = ["James", "Tim", "Peter"]

for name in names:
 ? ?if name == "Steve":
 ? ? ? ?print("Steve in the list!")
 ? ? ? ?break
else:
 ? ?print("Not found Peter!")

# Not found Peter!

如該例,當(dāng)break沒(méi)有發(fā)生在for循環(huán)中時(shí),將執(zhí)行else代碼塊,為了驗(yàn)證,我們稍做改動(dòng)

names = ["James", "Tim", "Peter", "Steve"]

for name in names:
 ? ?if name == "Steve":
 ? ? ? ?print("Steve in the list!")
 ? ? ? ?break
else:
 ? ?print("Not found Peter!")

# Steve in the list!

在該例中,由于觸發(fā)了break,else代碼塊未被執(zhí)行

256、257

如果在Python中比較數(shù)字,有時(shí)可能會(huì)得到意想不到的結(jié)果,如

>>> a=256
>>> b=256
>>> a is b
True
>>> x=257
>>> y=257
>>> x is y
False

這是因?yàn)镻ython 會(huì)預(yù)加載[-5, 256]范圍內(nèi)的所有整數(shù),以節(jié)省時(shí)間和內(nèi)存成本,因此,當(dāng)聲明此范圍內(nèi)的整數(shù)時(shí),Python 僅引用緩存的整數(shù),而不會(huì)創(chuàng)建任何新對(duì)象

即該例中ab是同一個(gè)對(duì)象,而xy卻不是

為驗(yàn)證這點(diǎn),可以打印每個(gè)變量的id

>>> id(a)
1696073345424
>>> id(b)
1696073345424
>>> id(x)
1696122928496
>>> id(y)
1696122928752

這種情況在Python中稱(chēng)為integer caching

String caching

和前述integer caching,Python中也會(huì)對(duì)small-size strings進(jìn)行緩存,如該例

>>> a = 'Zhou'
>>> b = 'Zhou'
>>> a is b
True
>>> c = 'Cai Xukong'
>>> d = 'Cai Xukong'
>>> c is d
False

就Python3.7來(lái)看,使用AST優(yōu)化器最多可以緩存4096字符,但任何包含空格的字符串都不會(huì)緩存

>>> a = 'qyuqhsjkdbzksjgbvhjzsdbkjsfhlweakjfhiufgh'
>>> b = 'qyuqhsjkdbzksjgbvhjzsdbkjsfhlweakjfhiufgh'
>>> a is b
True
>>>

修改元組

在Python中元組是不可變對(duì)象,但考慮以下情況

tp = ([1, 2, 3], 4, 5)
tp[0].append(4)
print(tp)
# ([1, 2, 3, 4], 4, 5)

這是因?yàn)榍短譖ython對(duì)象的可變性取決于嵌套對(duì)象本身,雖然tp是不可變?cè)M,但tp[0]是可變列表(類(lèi)似的,還需注意嵌套類(lèi)型的深淺拷貝問(wèn)題

0.1+0.2 == 0.3?

正常人都清楚0.1+0.2的結(jié)果為0.3,但Python中

print(0.1+0.2 == 0.3)
# False

那么為什么會(huì)這樣?我們打印出結(jié)果

>>> 0.1 + 0.2
0.30000000000000004

準(zhǔn)確的說(shuō)這是由于計(jì)算機(jī)只能以一定的精度存儲(chǔ)和處理浮點(diǎn)數(shù)。因此,浮點(diǎn)運(yùn)算依賴(lài)于機(jī)器處理器中的硬件實(shí)現(xiàn),并且沒(méi)有任何編程語(yǔ)言可以說(shuō)其浮點(diǎn)計(jì)算總是正確的

>>> 0.42 + 0.4
0.8200000000000001

+=比=快

在Python中連接字符串,使用+=+運(yùn)算符雖然都可以達(dá)到目的,但代價(jià)不同,如

>>> import timeit
>>> print(timeit.timeit("s1 = s1 + s2 + s3", setup="s1 = ' ' * 100000; s2 = ' ' * 100000; s3 = ' ' * 100000", number=100))
0.45820390002336353
>>> print(timeit.timeit("s1 += s2 + s3", setup="s1 = ' ' * 100000; s2 = ' ' * 100000; s3 = ' ' * 100000", number=100))
0.20369120000395924

為啥會(huì)這樣,這是由于+=不會(huì)創(chuàng)建新對(duì)象,這樣時(shí)間不就摳出來(lái)了,別小瞧這點(diǎn)時(shí)間,在字符串處理密集且繁雜的任務(wù)中這是不小的提升

…代替pass

大多數(shù)人可能還在使用pass來(lái)代表占位符

def my_func():
 ? pass

但其實(shí)三個(gè)...也有相同功效(我自己在搭代碼框架時(shí)也習(xí)慣用這種方式)

def my_func():
 ? ...

以上就是本期的全部?jī)?nèi)容,期待點(diǎn)贊在看,我是啥都生,下次再見(jiàn)

Python這些冷門(mén)特性,當(dāng)初也沒(méi)教啊的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
宁海县| 财经| 平遥县| 古田县| 金秀| 固原市| 安图县| 金沙县| 河津市| 时尚| 黔东| 绥阳县| 闸北区| 平昌县| 涞源县| 翼城县| 宾川县| 布尔津县| 缙云县| 邮箱| 大名县| 铜梁县| 周宁县| 曲靖市| 福建省| 子洲县| 郎溪县| 积石山| 兴化市| 朝阳县| 黎城县| 田林县| 遂平县| 二手房| 高台县| 永新县| 理塘县| 华阴市| 双辽市| 峨山| 霍邱县|