日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本期整理了Python/ target=_blank class=infotextkey>Python中幾個冷門甚至奇特但又一直存在的特性,一起看看吧

for-else

if-else想必所有人都知道用來處理條件判斷,但Python中還有個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!

如該例,當break沒有發生在for循環中時,將執行else代碼塊,為了驗證,我們稍做改動

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!

在該例中,由于觸發了break,else代碼塊未被執行

256、257

如果在Python中比較數字,有時可能會得到意想不到的結果,如

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

這是因為Python 會預加載[-5, 256]范圍內的所有整數,以節省時間和內存成本,因此,當聲明此范圍內的整數時,Python 僅引用緩存的整數,而不會創建任何新對象

即該例中ab是同一個對象,而xy卻不是

為驗證這點,可以打印每個變量的id

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

這種情況在Python中稱為integer caching

String caching

和前述integer caching,Python中也會對small-size strings進行緩存,如該例

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

就Python3.7來看,使用AST優化器最多可以緩存4096字符,但任何包含空格的字符串都不會緩存

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

修改元組

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

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

這是因為嵌套Python對象的可變性取決于嵌套對象本身,雖然tp是不可變元組,但tp[0]是可變列表(類似的,還需注意嵌套類型的深淺拷貝問題)

0.1+0.2 == 0.3?

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

print(0.1+0.2 == 0.3)
# False

那么為什么會這樣?我們打印出結果

>>> 0.1 + 0.2
0.30000000000000004

準確的說這是由于計算機只能以一定的精度存儲和處理浮點數。因此,浮點運算依賴于機器處理器中的硬件實現,并且沒有任何編程語言可以說其浮點計算總是正確的

>>> 0.42 + 0.4
0.8200000000000001

+=比=快

在Python中連接字符串,使用+=+運算符雖然都可以達到目的,但代價不同,如

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

為啥會這樣,這是由于+=不會創建新對象,這樣時間不就摳出來了,別小瞧這點時間,在字符串處理密集且繁雜的任務中這是不小的提升

…代替pass

大多數人可能還在使用pass來代表占位符

def my_func():
   pass

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

def my_func():
   ...

以上就是本期的全部內容,期待點贊在看,我是啥都生,下次再見

分享到:
標簽:Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定