標籤:values tac ict 參數 傳回值 導致 語句 就會 ada
2017年6月4日21:08:34
1.dict的作用是建立一組 key 和一組 value 的映射關係,dict的key是不能重複的。
2.set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重複,而且是無序的,這點和 dict 的 key很像。
3.因為set不能包含重複的元素,所以,當我們傳入包含重複元素的 list 會怎麼樣呢?會去掉重複的元素。set其實就是數學中的集合。
4.由於set儲存的是無序集合,所以我們沒法通過索引來訪問。
5.訪問 set中的某個元素實際上就是判斷一個元素是否在set中。
6.set的內部結構和dict很像,唯一區別是不儲存value,因此,判斷一個元素是否在set中速度很快。
set儲存的元素和dict的key類似,必須是不變對象,因此,任何可變對象是不能放入set中的。
set儲存的元素也是沒有順序的。
7.由於 set 也是一個集合,所以,遍曆 set 和遍曆 list 類似,都可以通過 for 迴圈實現。
8.由於set儲存的是一組不重複的無序元素,因此,更新set主要做兩件事:
一是把新的元素添加到set中,二是把已有元素從set中刪除。
添加元素時,用set的add()方法:
9.刪除set中的元素時,用set的remove()方法:
-----------------分割線--------------------
第7章 函數
7-1 Python之什麼是函數
7-2 Python之調用函數
7-3 Python之編寫函數
7-4 Python函數之返回多值
7-5 Python之遞迴函式
7-6 Python之定義預設參數
7-7 Python之定義可變參數
筆記:
1.函數就是最基本的一種代碼抽象的方式。
2.抽象是數學中非常常見的概念。
3.要調用一個函數,需要知道函數的名稱和參數,比如求絕對值的函數 abs,它接收一個參數。
4.比較函數 cmp(x, y) 就需要兩個參數,如果 x<y,返回 -1,如果 x==y,返回 0,如果 x>y,返回 1:
5.Python內建的常用函數還包括資料類型轉換函式,比如 int()函數可以把其他資料類型轉換為整數:
6.str()函數把其他類型轉換成 str:
7.在Python中,定義一個函數要使用 def 語句,依次寫出函數名、括弧、括弧中的參數和冒號:,然後,在縮排塊中編寫函數體,函數的傳回值用 return 語句返回。
8.函數體內部的語句在執行時,一旦執行到return時,函數就執行完畢,並將結果返回。因此,函數內部通過條件判斷和迴圈可以實現非常複雜的邏輯。
9.for 迴圈可以取出list中每個元素。
10.Python的函數返回多值其實就是返回一個tuple
1.在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞迴函式。
2.遞迴函式的優點是定義簡單,邏輯清晰。理論上,所有的遞迴函式都可以寫成迴圈的方式,但迴圈的邏輯不如遞迴清晰。
3.使用遞迴函式需要注意防止棧溢出。在電腦中,函數調用是通過棧(stack)這種資料結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。
由於棧的大小不是無限的,所以,遞迴調用的次數過多,會導致棧溢出。可以試試計算 fact(10000)。
4.int()函數的第二個參數是轉換進位,如果不傳,預設是十進位 (base=10),如果傳了,就用傳入的參數。
5.Python之定義預設參數,就是給參數一個預設的值。直接用就行。
6.如果想讓一個函數能接受任意個參數,我們就可以定義一個可變參數:
7.可變參數的名字前面有個 * 號,我們可以傳入0個、1個或多個參數給可變參數:
------------------------分割線--------------------------
第8章 切片
8-1 對list進行切片
8-2 倒序切片
8-3 對字串切片
筆記:
1.L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引0,1,2,正好是3個元素。
2.L[:]實際上複製出了一個新list。
3.切片操作還可以指定第三個參數:
L[::2]
[‘Adam‘, ‘Bart‘]
第三個參數表示每N個取一個,上面的 L[::2] 會每兩個元素取出一個來,也就是隔一個取一個。
把list換成tuple,切片操作完全相同,只是切片的結果也變成了tuple。
4.對於list,既然Python支援L[-1]取倒數第一個元素,那麼它同樣支援倒數切片
5.在很多程式設計語言中,針對字串提供了很多各種截取函數,其實目的就是對字串切片。Python沒有針對字串的截取函數,只需要切片一個操作就可以完成,非常簡單。
-------------------分割線-------------------------------------
第9章 迭代
9-1 什麼是迭代
9-2 索引迭代
9-3 迭代dict的value
9-4 迭代dict的key和value
筆記:
1.在Python中,如果給定一個list或tuple,我們可以通過for迴圈來遍曆這個list或tuple,這種遍曆我們成為迭代(Iteration)。
2.迭代操作就是對於一個集合,無論該集合是有序還是無序,我們用 for 迴圈總是可以依次取出集合的每一個元素。
3.集合是指包含一組元素的資料結構,我們已經介紹的包括:
1. 有序集合:list,tuple,str和unicode;
2. 無序集合:set
3. 無序集合并且具有 key-value 對:dict
4.迭代是一個動詞,它指的是一種操作,在Python中,就是 for 迴圈。
5.Python中,迭代永遠是取出元素本身,而非元素的索引。
6.對於有序集合,元素確實是有索引的。有的時候,我們確實想在 for 迴圈中拿到索引,怎麼辦?
方法是使用 enumerate() 函數:
7.使用 enumerate() 函數,我們可以在for迴圈中同時綁定索引index和元素name。但是,這不是 enumerate() 的特殊文法。實際上,enumerate() 函數把:
[‘Adam‘, ‘Lisa‘, ‘Bart‘, ‘Paul‘]
變成了類似:
[(0, ‘Adam‘), (1, ‘Lisa‘), (2, ‘Bart‘), (3, ‘Paul‘)]
因此,迭代的每一個元素實際上是一個tuple:
8.可見,索引迭代也不是真的按索引訪問,而是由 enumerate() 函數自動把每個元素變成 (index, element) 這樣的tuple,再迭代,就同時獲得了索引和元素本身。
9.dict對象本身就是可迭代對象,用 for 迴圈直接迭代 dict,可以每次拿到dict的一個key。
10.如果我們希望迭代 dict 對象的value,應該怎麼做?
dict 對象有一個 values() 方法,這個方法把dict轉換成一個包含所有value的list,這樣,我們迭代的就是 dict的每一個 value:
1.那這兩個方法有何不同之處呢?
1. values() 方法實際上把一個 dict 轉換成了包含 value 的list。
2. 但是 itervalues() 方法不會轉換,它會在迭代過程中依次從 dict 中取出 value,所以 itervalues() 方法比 values() 方法節省了產生 list 所需的記憶體。
3. 列印 itervalues() 發現它返回一個 <dictionary-valueiterator> 對象,這說明在Python中,for 迴圈可作用的迭代對象遠不止 list,tuple,str,unicode,dict等,任何可迭代對象都可以作用於for迴圈,而內部如何迭代我們通常並不用關心。
如果一個對象說自己可迭代,那我們就直接用 for 迴圈去迭代它,可見,迭代是一種抽象的資料操作,它不對迭代對象內部的資料有任何要求。
4.迭代dict的key和value
我們瞭解了如何迭代 dict 的key和value,那麼,在一個 for 迴圈中,能否同時迭代 key和value?答案是肯定的。
可以看到,items() 方法把dict對象轉換成了包含tuple的list,我們對這個list進行迭代,可以同時獲得key和value:
>>> for key, value in d.items():
... print key, ‘:‘, value
...
Lisa : 85
Adam : 95
Bart : 59
和 values() 有一個 itervalues() 類似, items() 也有一個對應的 iteritems(),iteritems() 不把dict轉換成list,而是在迭代過程中不斷給出 tuple,所以, iteritems() 不佔用額外的記憶體。
-------------------分割線--------------------
第10章 列表產生式
10-1 產生列表
10-2 複雜運算式
10-3 條件過濾
10-4 多層運算式
筆記:
1.複雜運算式:就是使用for迴圈的迭代不僅可以迭代普通的list,還可以迭代dict。
2.列表產生式的 for 迴圈後面還可以加上 if 判斷。
------------------------分割線----------------------------已經學完基本教程
python爬蟲學習研究