深入Python3 (Dive Into Python3)筆記2--內置數據類型

一切內容都是摘抄,主要是便於回憶和鼓勵自己不要間斷,更詳細內容請見原帖地址:

《深入 python3 》中文版

http://woodpecker.org.cn/diveintopython3/index.html

深入

Numbers[數值型] 可以是 Integers[整數](1 和 2)、Floats[浮點數](1.1 和 1.2)、Fractions[分數](1/2 和 2/3);甚至是 Complex Number[複數]。

2.2. 布爾類型

2.3. 數值類型

可以使用 type() 函數來檢測任何值或變量的類型。

同樣,還可使用 isinstance() 函數判斷某個值或變量是否爲給定某個類型。

將一個 int 與一個 float 相加將得到一個 float 。Python 把 int 強制轉換爲 float 以進行加法運算;然後返回一個 float 類型的結果。

2.3.1. 將整數強制轉換爲浮點數及反向轉換

通過調用float() 函數,可以顯示地將 int 強制轉換爲 float。

int() 將進行取整,而不是四捨五入。

對於負數,int() 函數朝着 0 的方法進行取整。它是個真正的取整(截斷)函數,而不是 floor[地板]函數。

浮點數精確到小數點後 15 位。

整數可以任意大。

2.3.2. 常見數值運算

// 運算符執行古怪的整數除法。如果結果爲正數,可將其視爲朝向小數位取整(不是四捨五入),但是要小心這一點。

當整數除以負數, // 運算符將結果朝着最近的整數“向上”四捨五入。從數學角度來說,由於 ?6 比 ?5 要小,它是“向下”四捨五入,如果期望將結果取整爲 ?5,它將會誤導你。

// 運算符並非總是返回整數結果。如果分子或者分母是 float,它仍將朝着最近的整數進行四捨五入,但實際返回的值將會是 float 類型。

** 運算符的意思是“計算冪”,

2.3.3. 分數

Python 並不僅僅侷限於整數和浮點數類型。它可以完成你在高中階段學過、但幾乎已經全部忘光的所有古怪數學運算。

爲定義一個分數,創建一個 Fraction 對象並傳入分子和分母

Fraction 對象將會自動進行約分。(6/4) = (3/2)

2.3.4. 三角函數

math 模塊包括了所有的基本三角函數,包括:sin()、 cos()、tan() 及像 asin() 這樣的變體函數。

然而要注意的是 Python 並不支持無限精度。tan(π / 4) 將返回 1.0,而不是 0.99999999999999989

2.3.5. 布爾上下文環境中的數值

可以在 if 這樣的 布爾類型上下文環境中 使用數值。零值是 false[假],非零值是 true[真]。

您知道可以在 Python 交互式 Shell 中定義自己的函數嗎?只需在每行的結尾按 回車鍵 ,然後在某一空行按 回車鍵 結束。

非零浮點數爲真; 0.0 爲假。請千萬小心這一點!如果有輕微的四捨五入偏差(正如在前面小節中看到的那樣,這並非不可能的事情),那麼 Python 將測試 0.0000000000001 而不是 0 ,並將返回一個 True 值。

分數也可在布爾類型上下文環境中使用。無論 n 爲何值,Fraction(0, n) 爲假。所有其它分數爲真。

2.4. 列表

2.4.1. 創建列表

如果負數令你混淆,可將其視爲如下方式: a_list[-n] == a_list[len(a_list) - n] 。因此在此列表中, a_list[-3] == a_list[5 - 3] == a_list[2]。

2.4.2. 列表切片

定義列表後,可從其中獲取任何部分作爲新列表。該技術稱爲對列表進行 切片 。

如果切片索引之一或兩者均爲負數,切片操作仍可進行。如果有幫助的話,您可以這麼思考:自左向右讀取列表,第一個切片索引指明瞭想要的第一個元素,第二個切片索引指明瞭第一個不想要的元素。返回值是兩者之間的任何值。

事實上,無論列表的長度是多少, a_list[:n] 將返回頭 n 個元素,而 a_list[n:] 返回其餘部分。

2.4.3. 向列表中新增項

append() 方法向列表的尾部添加一個新的元素。

extend() 方法只接受一個列表作爲參數,並將該參數的每個元素都添加到原有的列表中。

insert() 方法將單個元素插入到列表中。第一個參數是列表中將被頂離原位的第一個元素的位置索引。列表中的元素並不一定要是唯一的;

如果開始的時候有個 6 元素列表,然後將一個列表 append[添加]上去,結果就會……得到一個 7 元素列表。爲什麼是 7 個?因爲最後一個元素(剛剛 append[添加] 的元素) 本身是個列表 。列表可包含任何類型的數據,包括其它列表。這可能是你所需要的結果,也許不是。但如果這就是你想要的,那這就是你所得到的。

2.4.4. 在列表中檢索值

count() 方法返回了列表中某個特定值出現的次數。

如果你想知道的是某個值是否出現在列表中, in 運算符將會比使用 count() 方法要略快一些。in 運算符總是返回 True 或 False;它不會告訴你該值出現在什麼位置。

如果想知道某個值在列表中的精確位置,可調用 index() 方法。儘管可以通過第二個參數(以 0 爲基點的)索引值來指定起點,通過第三個參數(以 0 基點的)索引來指定搜索終點,但缺省情況下它將搜索整個列表,

index() 方法將查找某值在列表中的第一次出現。

可能 出乎 您的預期,如果在列表中沒有找到該值,index() 方法將會引發一個例外。

2.4.5. 從列表中刪除元素

可使用 del 語句從列表中刪除某個特定元素。

刪除索引 1 之後再訪問索引 1 將 不會 導致錯誤。被刪除元素之後的所有元素將移動它們的位置以“填補”被刪除元素所產生的“縫隙”。

還可以通過 remove() 方法從列表中刪除某個元素。remove() 方法接受一個 value 參數,並刪除列表中該值的第一次出現。同樣,被刪除元素之後的所有元素將會將索引位置下移,以“填補縫隙”。列表永遠不會有“縫隙”。

您可以盡情地調用 remove() 方法,但如果試圖刪除列表中不存在的元素,它將引發一個例外。

2.4.6. Removing Items From A List: Bonus Round

如果不帶參數調用, pop() 列表方法將刪除列表中最後的元素,並返回所刪除的值。

可以從列表中 pop[彈出]任何元素。只需傳給 pop() 方法一個位置索引值。它將刪除該元素,將其後所有元素移位以“填補縫隙”,然後返回它刪除的值。

2.4.7. 布爾上下文環境中的列表

空列表爲假;其它所有列表爲真。

2.5. 元組

元素 是不可變的列表。一旦創建之後,用任何方法都不可以修改元素

列表有像 append()、 extend()、 insert()、remove() 和 pop() 這樣的方法。這些方法,元組都沒有。可以對元組進行切片操作(因爲該方法創建一個新的元組),可以檢查元組是否包含了特定的值(因爲該操作不修改元組),還可以……就那麼多了。

元組可轉換成列表,反之亦然。內建的 tuple() 函數接受一個列表參數,並返回一個包含同樣元素的元組,而 list() 函數接受一個元組參數並返回一個列表。從效果上看, tuple() 凍結列表,而 list() 融化元組。

 

2.5.1. 布爾上下文環境中的元組

爲創建單元素元組,需要在值之後加上一個逗號。沒有逗號,Python 會假定這只是一對額外的圓括號,雖然沒有害處,但並不創建元組。

2.5.2. 同時賦多個值

v 是一個三元素的元組,而 (x, y, z) 是包含三個變量的元組。將其中一個賦值給另一個將會把 v 中的每個值按順序賦值給每一個變量。

(從技術上來說, range() 函數返回的既不是列表也不是元組,而是一個 迭代器,但稍後您將學到它們的區別。)

還可以使用多變量賦值創建返回多值的函數,只需返回一個包含所有值的元組。調用者可將返回值視爲一個簡單的元組,或將其賦值給不同的變量。

2.6. 集合

2.6.1. 創建集合

要創建只包含一個值的集合,僅需將該值放置於花括號之間。({})。

實際上,集合以 類 的形式實現,但目前還無須考慮這一點。

要從列表創建集合,可使用 set() 函數。

要創建空集合,可不帶參數調用 set() 。

2.6.2. 修改集合

add() 方法接受單個可以是任何數據類型的參數,並將該值添加到集合之中。

集合是裝 唯一值 的袋子。如果試圖添加一個集合中已有的值,將不會發生任何事情。將不會引發一個錯誤;只是一條空操作。

update() 方法接受一個集合作爲參數,並將其所有成員添加到初始列表中。其行爲方式就像是對參數集合中的每個成員調用 add() 方法。

實際上,可以帶任何數量的參數調用 update() 方法。如果調用時傳遞了兩個集合, update() 將會被每個集合中的每個成員添加到初始的集合當中(丟棄重複值)。

update() 方法還可接受一些其它數據類型的對象作爲參數,包括列表。如果調用時傳入列表,update() 將會把列表中所有的元素添加到初始集合中。

2.6.3. 從集合中刪除元素

如果針對一個集合中不存在的值調用 discard() 方法,它不進行任何操作。不產生錯誤;只是一條空指令。

區別在這裏:如果該值不在集合中,remove() 方法引發一個 KeyError 例外。

2.6.4. 常見集合操作

union() 方法返回一個新集合,其中裝着 在兩個 集合中出現的元素。

intersection() 方法返回一個新集合,其中裝着 同時 在兩個集合中出現的所有元素。

difference() 方法返回的新集合中,裝着所有在 a_set 出現但未在 b_set 中的元素。

symmetric_difference() 方法返回一個新集合,其中裝着所有 只在其中一個 集合中出現的元素。

a_set.issubset(b_set)

b_set.issuperset(a_set)

2.6.5. 布爾上下文環境中的集合

2.7. 字典

2.7.1. 創建字典

2.7.2. 修改字典

2.7.3. 混合值字典

而且像列表和集合一樣,可使用 in 運算符以測試某個特定的鍵是否在字典中。

2.7.4. 布爾上下文環境中的字典

空字典爲假值;所有其它字典爲真值。

2.8. None

None 是 Python 的一個特殊常量。它是一個 空 值。None 與 False 不同。None 不是 0 。None 不是空字符串。將 None 與任何非 None 的東西進行比較將總是返回 False 。

None 是唯一的空值。它有着自己的數據類型(NoneType)。可將 None 賦值給任何變量,但不能創建其它 NoneType 對象。所有值爲 None 變量是相等的。

2.8.1. 布爾上下文環境中的 None

在 布爾類型上下文環境中, None 爲假值,而 not None 爲真值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章