python 慕课课程笔记(一)
python 慕課課程筆記
1.python 是動態語言,而 java 是靜態語言。動態語言變量本身的類型時不固定的,而靜態語言在變量定義時就必須指定變量的類別。
2. 在python 代碼中書寫 a=“ABC" 時,Python解釋器干了兩件事情:
1.在內存中創建了一個“ABC”的字符串
2.在內存中創建了一個名為 a 的變量,并把它指向“ABC”
所以在之后進行 b=a 的賦值操作時,b會指向a指向的這個字符串。
3.關于 python 中的字符串表示:
4.python 到后來改成 unicode 編碼后,可以支持中文的書寫。不過形式如下:
u′中文′;搭配 r 可以這么使用: ur'''?\^-^/?'''
5.在 python 編譯器中遇到 UnicodeDecodeError 的時候,可以在代碼開頭加上如下的注釋:
# -*- coding: utf-8 -*-
目的是告訴 python 編譯器用 UTF-8 編碼讀取代碼。
6.python 中的除法 / 同樣為整除。
7.python 中有兩個布爾型的變量,True 和 False ,并且它們之間有與(and)、或(or)、非(not)三種運算。
8.python 中的空值處理:python 中將 0,空字符串 ′ ′,和 None 看做 False,而其他數值和非空字符串則看成 True。
9.python 中的短路規則:
| a and b | 返回 b | 返回 a |
| a or b | 返回 a | 返回 b |
所以在計算的時候,往往采取短路規則,并不是全部計算完畢后才返回結果。
10.python 中的幾個基本數據結構:
list 列表 [ ]
- 數學意義上的有序結合。
- 可以使用索引來進行引用 eg. L[1]。 并且 python 中也有倒敘索引,從-1 開始。不管是正序索引還是倒序,都要注意不要越界。
- 列表的插入有兩個方法 append() 和 insert()。前者只有一個參數,是插入表尾;后者有兩個參數,可以指定插入的位置,第一個參數是索引號。
eg. append('Xiaoming') insert(0, 'Xiaoming') - 列表刪除元素用 pop()。
eg. pop(2) 參數是索引號。注意先大后小的原則,避免元素刪除造成順序改變。
tuple 元組 ( )
- 元組也是一種有序的列表,與 list 很類似,但一旦創建完畢,就不能修改了。
- 沒有 list 中的 pop,append,insert 方法。
- 獲取元素的方法與 list 是一樣的。
- 創建單元素 tuple 時,為避免歧義,要這么定義:
eg. t=(1,) // 不能漏掉這個逗號 - tuple 的不變性是指向的不變,并不是元素內容的不變。
eg. tuple 的一個元素是一個 list
11.循環控制
- python 縮進最好使用 4個空格,而不用 Tab 鍵。
- 交互式環境中敲代碼要注意縮進問題,退出縮進要多敲一行回車。
- python 中的多條件 if 語句,用的是 elif
- for 循環用于遍歷 list, tuple 十分方便,
eg. for name in L 其中 name 是在 for 循環中定義的,意思是取得 L 的每個元素賦值給 name。
12.python 中的特殊數據結構:
dict 詞典 { }
- 詞典是一個 key:value 的映射
- len() 函數可以計算任意集合的大小
- 可以通過 d[key] 的方式來查找 value
- 可以用 in 操作符來看看鍵是否在詞典中
eg. if 'Paul' in d: - dict 本身也提供一個 get 方法,如果鍵不存在則返回 None
eg. d.get('Paul') - dict 有三個特點
- 查找速度快,占用內存多(與 list 相反)。
- key 不能重復,key:value 對的順序是隨意的。且 dict 內部是無序的,有隨機性。
- 作為 key 的元素不可變。
- 直接使用 for 循環可以便利詞典的 key:
eg. for key in d: 這樣在循環體中就可以取得 相應的 value。
set 集合 ( )
- set 的元素是無序的,而且沒有重復。
- 創建 set 的方法是調用 set(),并傳入一個 list,list 的元素將作為 set 的元素。
eg. set=(['xiaoming','aiping','meijuan']) - 訪問:因為是無序的,所以無法用索引訪問,但可以用 in 操作符判斷是否在 set 中。
- set 的作用特點有點類似于枚舉器。 numerator。
- set 的更新操作有兩個函數:add() 和 remove(),其參數可以直接是相應的元素。一般后者操作前,一般需要加一個判斷,以看元素是否在 set 中。
12.python [內置函數查詢];并且可以通過 help() 命令來查詢函數的幫助信息。
13.python 中的函數內部的 return 會使函數立即執行完畢,并返回結果。如果沒有 return 語句,函數也會返回結果,不過結果為 None。
14.python 函數可以返回多個值,實則是返回一個 tuple。因為語法上,返回 tuple 可以不加括號,所以多個變量可以同時接收一個 tuple,并按位置賦給相應的變量。
15.python 中的遞歸函數:
1.遞歸函數定義簡單,邏輯清晰。理論上所有的遞歸函數都可以寫成循環的形式。
2.使用遞歸函數要防止棧溢出。因為:計算機中函數調用是通過 stack 實現的;每進入一個函數,棧就會加一層棧幀;每當函數返回,棧就會減一層棧幀。由于棧的大小不是無限的,所以遞歸調用的次數過多,會導致棧溢出。
16.python 中的默認參數:
1.默認參數的作用是簡化調用。
eg.python 自帶的 int() 函數就有兩個參數,如果如下所示的形式:
int('123',8) 則第二個參數指的是規定的進制。
2.由于函數參數按從左到右的順序匹配,所以默認參數只能定義在必要參數的后面。
def fn1(a,b=1,c=2)——正確
def fn2(a=1,b)——-錯誤
17.python 中如果想讓一個函數接收任意數量的參數,那么就可以定義一個可變參數,其形式如下:
def fn(*args)print args只需要在參數前加一個*,我們就可以給可變參數傳入0個,1個或多個參數。其實原理同返回多個參數相同,python 將這多個參數組合成一個 tuple 傳給可變參數。其目的一般也是為了簡化調用。
18.python 中的切片操作:
1.取前 n 個元素,一般可用循環來做: for i in range(n)
2.為避免使用循環,對于這種指定索引范圍的操作,python 提供了切片(slice)操作。
eg. L[0:3] 表示從索引 0 開始取,直到索引 3 為止,不包括索引 3。即索引 0,1,2,剛好 3 個元素。
3. 幾種情況:
- 第一個索引為 0 時,可以省略 L[:3]
- > 只用一個 : 表示從頭到尾 L[:]
- 切片操作還可定義第 3 個參數,表示取數的間隔。L[2::3] 表示的就是取 3 的倍數位置的元素。
4.range 函數可以創建一個數列
eg. range(1:101) 得到的是一個列表 [1,2,3,4,…,100]
5.python 也支持倒序切片。
6.python 沒有提供字符串截取函數,但用切片可以進行同類的操作。
19.python 中的迭代:
1.我們可以通過 for 循環來遍歷 list 或 tuple,這種遍歷操作我們成為迭代。
2.python for 的迭代對象,是一個集合,不管它有序無序,總是可以依次取得該集合中的每一個元素。
3.迭代與按下標訪問的不同之處在于,后者是一種具體的迭代實現方式,而前者只關心迭代的結果,并不關心迭代內部是如何實現的。
4.索引迭代:python 中往往都是取出元素的索引,而非元素本身,所以要想取出索引,可以使用 enumerate() 函數,它返回的每個元素實際是一個元組,包含兩個元素分別為索引和真正的元素。
它的結構為: [(0,'xiaoming'),(1,'xiaocao')]
具體操作為:for index, name in enumerate(L)
5.zip 函數可以將兩個 list 合并為 1個,組合形式類似于 enumerate() 函數的形式,一個典型的代碼為:
for index, name in zip(range(1, len(L)+1), L)
Note: 集合是包含一組元素的數據結構,它包括:
1.有序的集合:list tuple str unicode
2.無序的集合:set
3.無序的集合,并且有 key-value 對:dict
20.關于 dict 的迭代:
1.直接迭代 dict,取得的是 dict 的 key。
2.運用 values() 或者 itervalues() 函數進行迭代,可以取得 dict 的 value。
eg. for v in d.itervalues():
eg. for v in d.values():
3.以上的兩個函數迭代結果是一樣的,但是實際機制是不同的。
values() 方法是將 dict 轉化為只包含 value 的 list
itervalues() 方法是一次從 dict 中取出 value,所以節省了 list 的內存
4.如果一個對象可以迭代,那么用 for 循環去迭代即可。可見 python 中的迭代是一種更抽象的操作,它不對迭代對象內部的數據有任何的要求。
5.如果運用 items() 函數的話,可以同時迭代 dict 的 key 與 value。此外也有相應的 iteritems(),區別同前。
eg.for key,value in d.items():
21.python 生成列表:
1.列表生成式用于在不用循環的情況下,生成 list
eg.[x * x for x in range(1, 11)]
其結果為:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2.包含 dict 的復雜生成列表:
eg. 用復雜生成列表生成 html 表格:
d = { ‘Adam’: 95, ‘Lisa’: 85, ‘Bart’: 59 }
3.帶條件的復雜生成類表:如下示例:
def toUppers(L):return [x.upper() for x in L if isinstance(x, str)] print toUppers(['Hello', 'world', 101]) 添加 if 語句即可,并且 isinstance(x,str) 是用來判斷 x 是否是字符串。4.多層表達式
for 循環是可以嵌套的,所以如下示例:
print [100 * n1 + 10 * n2 + n3 for n1 in range(1, 10) for n2 in range(10) for n3 in range(10) if n1==n3]
輸出的就是1000以內,個位數和百位數字相等的三位數。
總結
以上是生活随笔為你收集整理的python 慕课课程笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Opensmile 简介
- 下一篇: CV书单-Benjio PAMI rev