Python 基礎學習筆記 七

2021-08-01 13:24:46 字數 2072 閱讀 3184

python在設計上堅持了清晰劃一的風格,這使得python成為一門易讀、易維護,並且被大量使用者所歡迎的、用途廣泛的語言。接下來,記錄一些本人自主學習python的一些筆記:

比較、相等性和真值

== 測試值得相等性

is 測試物件的一致性

a = [1,(1,2,3)]

b = [1,(1,2,3]

print(a == b,a is b) # 結果:true

false

# 分析:a,b值相等,但是不是同乙個物件

a = "123"

b = "123"

print(a == b,a is b) # 結果:true

true

# 分析:a,b值相等,所以a == b為true.雖然a,b為兩個物件,但是python內部儲存並重複使用字串作為最佳化,實際上記憶體中只有乙個字串"123"供a,b分享(如int,float等基本資料型別也是如此),所以a is b為true

字典的比較

字典的比較原理是根據鍵與值分別進行比較

dict1 = 

dict2 =

print(dict1 == dict2) # 結果false

print(sorted(dict1.items()) < sorted(dict2.items())) # 結果:true

拷貝與引用
l = [1,2,3]

m = [1,l,"bb"]

print(l) # [1,2,3]

print(m) # [1,[1,2,3],"bb"]

l[1] = 0

print(l) # [1,0,3]

print(m) # [1,[1,0,3],"bb"]

# 此時l內部的值發生了改變,m也會跟著改變,此時就是m引用了l

l = [1,2,3]

m = [1,l[:],"bb"]

print(l) # [1,2,3]

print(m) # [1,[1,2,3],"bb"]

l[1] = 0

print(l) # [1,0,3]

print(m) # [1,[1,2,3],"bb"]

# 此時l內部的值發生了改變,而m卻不會跟著改變,此時就可以稱為m拷貝了l([:]代表從頭到尾開始拷貝,[0:2]拷貝區間為0-2)

重複賦值
l = [1,2,3]

print(l * 4) # 結果:[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]

print([l] * 4) # 結果:[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]

擴充套件序列解包

通常序列賦值需要左邊的變數數目與右邊的值專案相等,否則將會報錯。此時python3引入了乙個帶*號的名稱,使得左邊變數的專案與右邊的值專案不相等時,也不會報錯,這就是擴充套件序列

l = [1,2,3,4]

a,b,*c = l

print(a,b,c) # 結果:1,2,[3,4]

l = [1,2]

a,b,*c = l

print(a,b,c) # 結果:1,2,

l = [1,2,3]

a,b,*c = l

print(a,b,c) # 結果:1,2,[3]

l = [1,2,3]

a,b,*c,d = l

print(a,b,c,d) # 結果:1,2,,3

# 通過三組資料可以發現,無論*c有沒有匹配到值,返回的都是乙個列表,並且左邊的數目小於右邊的數目時,無論*c在什麼位置,都不會賦與到值

# 擴充套件序列解包語法不單對列表有用,對任何型別都有用

a,b,*c = "123555"

print(a,b,c) # 結果:1,2,["3","5","5","5"]

注:如果有多個帶星號的名稱,或者沒有帶星號的名稱時變數專案與值專案不相等,都會報錯。

Python基礎筆記 七

語法 for 變數 in 迭代序列 即列表,元組,字典,集合或字串 迴圈體 for 迴圈訪問列表 list woodman alan bobo for name in list print name 輸出結果 woodman alan bobo 語法 for 變數 in 迴圈序列 迴圈體 else ...

Python學習筆記(七)

深淺拷貝 set 集合 函式a 1,2 3,4 b a.copy print b 結果 1,2 3,4 b 0 0 8 print a 結果 8,2 3,4 print b 結果 8,2 3,4 原理圖 去重關係測試 定義語法 s set in not in 集合等價與不等價 子集 s set al...

python學習筆記(七)

帶有 yield 關鍵字的的函式在 python 中被稱之為 generator 生成器 python 直譯器會將帶有 yield 關鍵字的函式視為乙個 generator 來處理。乙個函式或者子程式都只能 return 一次,但是乙個生成器能暫停執行並返回乙個中間的結果 這就是 yield 語句的...