Python要點復習
1. 數據類型概覽
Number/String/List/Tuple/Set/Dictionary
- 是否可變:
- 不可變數據類型:
Number/String/Tuple - 可變數據類型:
List/Set/Dictionary
- 不可變數據類型:
- 數字類型
int整數(只有一種整數類型)bool類型:True/Falsefloat浮點數complex復數
2. 運算符
- 位運算符:
&|~^ - 邏輯運算符:
andornot - 成員運算符:
in:如果在指定的序列中找到值則返回True,否則返回falsenot in:語義與in相反
- 身份運算符:
is:判斷兩個變量是否引用自同一個對象。x is y,如果x和y引用的是一個相同對象,則返回True,否則返回Falseis 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):返回指定鍵的值,如果鍵不在字典中則返回defaultkey 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

