快速上手 Python 3 常用類型

  • Build-in Type 內建類型
  • Numeric 數值
  • String 字串
  • Container 容器
  • Function 函式
  • Name 名稱

Build-in Type 內建類型

本節講述如何在 Python 中呈現與處理您的資料格式。

最常應用的類型為數值 (Numeric)、字串 (String) 與容器 (Container)。

前兩者用於儲存您的資料;容器可以編排資料,以供檢索與比較。

數據處理上,使用名稱 (Name) 與運算子 (Operator) 可以達成單一數據的處理。

名稱可以在程式中代表數據的用途;運算子則是以簡單明瞭的形式做比較與運算。

內建類型可以透過如下方式將相近類型轉換,有類似函式的功能。

float(500)
tuple([0, 1, 2])

另外,可以通過 type() 函式來檢查值的類型。

print(type(20)==int) #True

Python 中,數值和字串有以下特性:

  • 是不會改變的,僅僅是作為數據的呈現。
  • 相同的定值儲存在相同的記憶體位址。

Numeric 數值

數值可以透過算術運算子進行計算。

布林值 bool

作為定義某件事的正確性,關鍵字 True 和 False 可以直接代表一個布林值。

print(25 > 20) #True

另外 True 在數字運算中可以當成 1,False 可以當成 0。

整數 int

定義整數數字,例如重複次數、清單長度等等。

print(len([0, 1, 2, 3, 4])) #5

若兩整數進行運算時(除法必須可以整除),會優先使用整數類型回傳結果。

整數還有其他表示法:

  • 二進位 b
  • 八進位 o
  • 十六進位 x
print(0b101) #5
print(0o20) #16
print(0x20) #32

即使使用其他種表示法,程式端還是以十進位為主,運算以二進位為主。

浮點數 float

定義小數數字,準確值可達 16 位數。

print(1/10) #0.1

在運算中可以混用整數來與浮點數做運算,但是注意不要把浮點數用在整數的需求上,即使它的尾數為 0。

透過兩種方法可以將浮點數轉換成整數:

  • 使用 int 類型,會直接移除小數位。
  • 使用 round() 函式,四捨五入到指定位數。
print(int(20.52)) #20
print(round(20.52)) #21
print(round(20.52, 1)) #20.5

浮點數還有其他種表示法:

  • 科學記號 e
print(6.5e5) #650000.0

複數 complex

定義虛數,同時還有包含實數位。

print((20+6j)+(8-9j)) #(28-3j)

複數沒辦法直接以套用類型的方式轉回 float、int 類型,可以改用以下方式。

  • 取出實部。
  • 取出虛部。
  • 計算絕對值。
print((4+3j).real) #4.0
print((4+3j).imag) #3.0
print(abs(4+3j)) #5.0

String 字串

字串用於儲存註記與符號,介於數值與容器之間,保有雙方某些特性。

字串可視為多個符號串連在一起的容器,可供檢索與比較。

但是事實上字串的「同一句話」是存於同個記憶體位址的,而且也只能「裝載」其他字串,這方面與數值無異。

使用兩個雙括弧 "' 單括弧可以將符號包成字串,使用上沒有分別,不過建議包含空白的字串使用雙括弧。

使用 str() 類型函式可以將其他類型轉為字串。

字串有以下幾個常用操作,注意常用的操作都會回傳新的字串。

大小寫轉換 upper lower capitalize

  • 全部小寫 upper
  • 全部小寫 lower
  • 字首大寫 capitalize
print("abc".upper()) #ABC
print("ABC".lower()) #abc
print("aBc".capitalize()) #Abc

結合與複製

使用一些易懂的運算子產生字串。

print("-"*7) #-------
print('a' + 'b' + 'c') #abc

取代 replace

將指定的字元取代成輸入字元。

print("get changed".replace('ged', 'ce')) #get chance

分割 split

使用輸入字元分割成 list 類型。

print("a,b,c".split(',')) #['a', 'b', 'c']

格式操作 format

透過轉換的方式填入非字串物件,可以參考格式語法

使用大括弧填入輸入的項目,若要使用大括弧符號,可以使用兩個代表({{}})。

print("{} %".format(50)) #50 %

使用冒號可以規定代數以及格式。

print("{percent:.02f} %".format(percent=50)) #50.00 %

在 Python 3.6 之後的版本可以簡化成這樣:

percent = 50
print(f"{percent:.02f} %") #50.00 %

使用 format() 比直接使用 + 運算子節省記憶體空間,因為不用儲存零碎的字串片段。

Container 容器

容器專門供應記憶體位址,可以將上面提供的兩大數據類型儲存到裡面,並且根據不同容器能做不同需求的操作。

清單 list

清單為有序動態容器,使用序號檢索與存取,直接寫法是使用中括弧 []

L = ['A', 'b', 2, 3]
print(L[0]) #A

加入至清單可以使用三種方式:

  • 加到尾部 append()
  • 插入到指定位置 insert()
  • 算術運算子 +、* 和指派運算子 +=
L = [8, 9]
L.append(7) #L = [8, 9, 7]
L.insert(1, 'b') #L = [8, 'b', 9, 7]
L += [2, 5, 6] #L = [8, 'b', 9, 7, 2, 5, 6]

移除有三種方式:

  • 移除尾部或指定序號並回傳 pop()
  • 尋找並移除 remove()(若找不到會發出錯誤)
  • 刪除關鍵字 del
L = ['a', 'b', 'c', 'd']
L.pop(1) #L = ['a', 'c', 'd']
L.remove('c') #L = ['a', 'd']
del L[-1] #L = ['a']

取得片段有序清單可以使用分割器 (Splitter),這個動作將會複製一部分的清單內容,使其變成片段的副本。

分割器與檢索符號類似,頭尾使用冒號 : 判斷。

L = ['a', 'b', 'c', 'd']
L1 = L[:2] #L1 = ['a', 'b']
L2 = L[:]
print(L2 is L) #False

元組 tuple

元組為有序靜態容器,僅供於檢索,直接寫法是使用小括弧 (),只有一項時必須加上一個逗號 ,

T = ('A',)
print(T[0]) #A

由於元組不可修改,因此結構會比 list 節省硬體資源。

另外元組也能夠使用算術運算子 +、* 和分割器。

字典 dict

字典為無序動態容器,使用鍵值 (Key value) 檢索與存取,直接寫法是使用大括弧 {},並且使用冒號 : 結合鍵值。

D = {'a':0, 'b':3, 'c':6}
print(D['c']) #6

字典可以透過指派運算子 = 來增加新值,用刪除關鍵字 del 刪除一組鍵值。

D = {'a':0, 'b':1, 'c':2}
D['d'] = 3 #D = {'a':0, 'b':1, 'c':2, 'd':3}
del D['b'] #D = {'a':0, 'c':2, 'd':3}

可以用 keys()、values() 和 items() 方法來取得或轉換所有鍵值,不過取出來為記憶體位置的順序,可以使用 sorted() 函式排序。

D = {'a':0, 'b':1, 'c':2}
K = list(D.keys()) #K = ['a', 'b', 'c']
V = list(D.values()) #V = [0, 1, 2]
D = [(k, v) for k, v in D.items()] #D = [('a', 0), ('b', 1), ('c', 2)]

集合 set

集合為無序動態容器,無法檢索或是存取,但是不能包含重複項目,用於篩選內容。

集合的直接寫法是使用大括弧 {},但是空集合是寫作 set(),以免認為是字典。

集合可以透過位元指派運算子操作:

S = {1, 2, 3}
S |= {2, 3, 6} #S = {1, 2, 3, 6}

透過排序值將集合轉為 list。

S = {1, 4, 3}
S = sorted(S) #S = [1, 3, 4]

Function 函式

一般的函式也是物件,可以被傳遞或是儲存至容器。

def plus(x, y):
    return x + y

print(plus(10, 20)) #30

若是只做簡單的計算,也能使用 lambda 關鍵字建立函式物件。

plus = lambda x, y: x + y

print(plus(10, 20)) #30

Name 名稱

名稱 (Name) 是 Python 中的專有名詞,可視為代名詞

名稱相當於綽號,可以將數據取名字,以供 Python 檢索這個數據的記憶體位址。

透過指派運算子,可以將一個數據命上喜歡的名字。

命名之後,名稱可以代表數據進行運算。

a = 25
b = 20
c = a - b
print(c) #5

命名規則如下:

  • 區分大小寫。
  • 不能包含空白。
  • 不能包含運算子。
  • 不能以數字為首。
  • 不要與關鍵字衝突。
  • 盡量避開內建類型函式的名稱。

若名稱想使用多個單字命名,以下的命名法都是正確的:

  • CNC
  • RedApple
  • removedLists
  • count_down
  • part1

Python 中可以覆蓋指派過的名稱,被覆蓋的數據不會刪除。因此在覆蓋前若是想存取舊的數據,應該為它找一個新的名稱,或是放在可以檢索到的地方,例如容器中。


Comments

comments powered by Disqus