Python要點復習
1. 數據類型概覽
Number
/String
/List
/Tuple
/Set
/Dictionary
- 是否可變:
- 不可變數據類型:
Number
/String
/Tuple
- 可變數據類型:
List
/Set
/Dictionary
- 不可變數據類型:
- 數字類型
int
整數(只有一種整數類型)bool
類型:True
/False
float
浮點數complex
復數
2. 運算符
- 位運算符:
&
|
~
^
- 邏輯運算符:
and
or
not
- 成員運算符:
in
:如果在指定的序列中找到值則返回True
,否則返回false
not in
:語義與in
相反
- 身份運算符:
is
:判斷兩個變量是否引用自同一個對象。x is y
,如果x
和y
引用的是一個相同對象,則返回True
,否則返回False
is not
:語義相反is
與==
的區別:is
判斷兩個變量是否引用同一個對象,==
判斷兩個變量的值是否相等
- 刪除運算符:
del
語句刪除對對象的引用
3. 字符串
- 單引號
'
和雙引號"
效果完全相同 - 沒有單獨的字符類型,字符就是長度為1的字符串
- 字符串是不可變常量
- 字符串可以使用
+
串聯在一起,用*
運算符重復 - 字符串截取(切片)的語法格式
[begin : end]
(前閉后開區間) - 字符串的索引,從前往后數從0開始遞增,從后往前數從-1開始遞減
4. 列表
- 列表使用方括號
[]
,元素間使用逗號,
分隔 - 列表中的元素可以具有不同的數據類型
- 列表屬於可變數據類型,列表中的元素是可以更改的
- 列表可以使用
+
串聯在一起,用*
運算符重復 - 列表截取(切片)的語法格式
[begin : end]
(前閉后開區間) - 列表的索引,從前往后數從0開始遞增,從后往前數從-1開始遞減
- 重要API:
list.append(obj)
:在列表末尾添加新元素list.count(obj)
:統計obj
在列表中出現過的次數list.extend(seq)
:在列表中一次性追加另一個序列seq
中的所有值list.index(obj)
:返回元素obj
在列表中第一次出現的索引值list.insert(idx, obj)
:將對象插入到列表中,位置為idx
,該位置原有的元素向后移動list.pop(index=-1)
:移除列表中指定位置的元素(默認為最后一個)並返回元素值list.reverse()
:反轉列表list.sort(cmp=None, key=None, reverse=False)
:對列表排序list.clear()
:清空列表list.copy()
:復制列表
5. 元組tuple
- 元組使用小括號
()
,元素間使用逗號,
分隔 - 元組中的元素可以具有不同的數據類型
- 元組的元素是不可更改的
- 單個元素不允許刪除或修改,只能刪除整個元組
- 特殊語法:
- 當元組中只有一個元素時,要在該元素后添加逗號
,
tup = (50, )
- 當元組中只有一個元素時,要在該元素后添加逗號
- 元組與字符串類似,下標索引從0開始,可以進行截取,組合等
6. 字典
- 字典的鍵值使用冒號
:
分隔,鍵值對之間使用逗號,
分隔,字典包括在花括號{}
中 - 鍵必須是唯一的,不允許存在重復的鍵
- 鍵必須是不可變類型,如字符串、數字或元組等
- 向字典增添新的鍵值對,或者修改現有的值的方法與C++語言類似
- 重要API:
dict.clear()
:刪除字典內的所有元素dict.copy()
:返回字典的淺復制dict.get(key, default=None)
:返回指定鍵的值,如果鍵不在字典中則返回default
key in dict
:判斷鍵key
是否在字典中dict.items()
:返回列表形式的(key, value)
元組數組dict.keys()
:返回字典中鍵的迭代器dict.values()
:返回字典中值的迭代器dict.update(dict2)
:將另一個字典中的鍵-值對更新到字典中dict.pop(key, default=None)
:刪除字典中key
對應的鍵值對,返回對應的值;如果鍵不存在,則返回傳入的default
值
7. 集合
- 集合中的元素不允許重復,而且是無序的
- 集合使用花括號
{}
,元素間使用逗號,
分隔- 創建空集合時必須使用
set()
,因為空花括號{ }
表示空字典
- 創建空集合時必須使用
- 重要API:
set.add(obj)
:向集合中添加元素,如果元素已經存在,則不做任何操作set.clear()
:清空集合set.remove(obj)
:刪除集合中的某個元素。如果該元素不存在,將會報錯set.discard(obj)
:刪除集合中的某個元素;如果元素不存在,不做任何處理set.copy()
:返回集合的淺拷貝set.update(set1)
:將另外一個集合中的元素全部添加到集合中set.isdisjoint(set1)
:判斷兩個集合中是否包含相等的元素,如果沒有,則返回True
- 此外,還有集合的交、並、補、差等操作,用到時再查表
8. 迭代器和生成器
- 迭代器:
- 迭代器的基本方法
iter()
和next()
- 迭代器的基本方法
- 生成器:使用了yield的函數稱為生成器(generator)
- 生成器是返回迭代器的函數,只能用於迭代操作
- 調用生成器,返回的是一個迭代器對象
- 在調用生成器運行的過程中,每次遇到 yield 時函數會暫停並保存當前所有的運行信息,返回yield 的值, 並在下一次執行 next() 方法時從當前位置繼續運行
import sys
def fibonacci(n): # 生成器函數 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一個迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()
9. 函數
- Python函數的參數傳遞:
- 不可變類型:類似於C++的值傳遞,如整數、字符串、元組。如
func(a)
,傳遞的只是a
的值,沒有影響a
對象本身。比如在func(a)
內部修改a
的值,只是修改另一個復制的對象,不會影響a
本身 - 可變類型:類似於C++的引用傳遞,如列表、字典、集合等。
- 不可變類型:類似於C++的值傳遞,如整數、字符串、元組。如
- lambda表達式創建匿名函數:
- lambda 函數擁有自己的命名空間,且不能訪問自己參數列表之外或全局命名空間里的參數
- 語法:
lambda arg1, arg2,... : expression
sum = lambda arg1, arg2: arg1 + arg2 print ("相加后的值為 : ", sum(10, 20)) print ("相加后的值為 : ", sum(20, 20))
10. 推導式:從序列創建序列
for
之后跟一個表達式,然后有零到多個for
或if
子句。返回結果是一個根據表達從其后的for
和if
上下文環境中生成出來的序列- 如
vec = [2, 4, 6]; [3*x for x in vec if x > 3]
將生成列表[12, 18]
11. 面向對象
- Python中類的構造器函數是
__init__(...)
- 在子類構造器中調用父類構造器方法:
父類名.__init__(self, arg1, arg2,...)
- 在子類構造器中調用父類構造器方法:
- 類的方法的第一個參數必須是
self
,代表調用該方法的類的實例 - 類的私有屬性和私有方法:使用兩個下划線
__
開頭,如__attrs
和__methods