內建函式
我們之前談過,Python 中有內建了許多的函式,我們不需要多做其他的動作就能使用,再這裡就讓我們介紹幾個還沒有看過的內建函式吧!
工廠函式
我們生成資料的方式有兩種,一種是透過字面定義,另外一種就是工廠函式了,我們舉個例子:
a = 5
a = int(5)
a = 5
是最常使用的生成方式,簡單的寫出一個字面上的符號 5
,就能產生一個整數。而使用內建函式 int
,也能夠產出一個整數,不過此例中,看不出 int
的威力,畢竟,寫起來還是麻煩多了。
但是下面的情形,我們就非得使用 int
不可:
string = '100'
a = int(string)
我們使用 int
來進行型態的轉換,最常見的情況便如同上例一樣,我們可以將字串的整數(型態是字串,但內容看起來就是整數)轉成真正的字串,這通常在接受使用者輸入和讀檔時是必要的工具。
像 int
這類的專門負責轉換型態或是製造資料的函式我們稱之為工廠函式,下表列出一些常見的工廠函式與應用:
內建函式 | 敘述 | 例子 | 結果 |
---|---|---|---|
int | 製造整數或將其他型態資料轉為整數 | int('99') | 99 |
float | 製造浮點數或將其他型態資料轉為浮點數 | float('1.73') | 1.73 |
bool | 製造布林值或是將其他型態資料轉為布林值 | bool('') | False |
str | 製造字串或是將其他型態資料轉為字串 | str(20) | '20' |
list | 製造清單或是將其他型態資料轉為清單 | list((1,2,3)) | [1,2,3] |
set | 製造集合或是將其他型態資料轉為集合 | list(set([1,1,2,2])) | [1,2] |
我們會發現 bool
函式可以在非布林語境中得到一個資料的布林值,而 set
可以將清單轉為集合型態,集合中的元素是不能重複的,以下是一個很簡單的方法,讓我們可以將清單中重複的元素過濾掉:
>>> lst = [1, 1, 2, 2, 3]
>>> list(set(lst)) # 轉成 set 濾掉重複的元素再轉回清單
[1, 2, 3]
全部或任何
"對於所有" (for all) 和 "存在一個" (exists) 是邏輯上面很重要的概念,假設我們用一個長度為 5 的清單來記錄班上 1 號到 5 號同學考試有沒有及格,如果該生及格,會標示 True
,否則會標示 False
:
pass = [True, True, True, False, False]
今天我們想要知道全班是不是都及格了,傳統的作法是:
all_pass = True
for s in pass:
if s==False:
all_pass = False
if all_pass:
print('都及格了,歐啪')
else:
print('有人不及格')
實在是太麻煩了,Python使用了 all
函式能支援這種運算:
if all(pass):
print('都及格了,歐啪')
else:
print('有人不及格')
all
函式可以接受一個清單作為參數,當全部的元素都為真 (或是在布林語境為真),則他的回傳值為真,否則為假。
另一個函式 any
剛好相反,只要有一個人為真,回傳值就是真了:
>>> any(pass)
True
最大與最小
如果讀者有意會到前面的例子,那對於找最大值與最小值,也不會想要用 for
進行查找比對,直接用內建函式吧:
lst = [1,2,3,4,5]
print(max(lst))
print(min(lst))
產生連續的整數
range
函式能幫我們產生連續的整數,通常會搭配 for
迴圈來使用:
for num in range(10):
print(num)
上面的代碼會印出 0 到 9,原因是 range(X)
會產生 0~x-1
的整數序列,透過 for
迭代後印出,我們也可以對產生的範圍作更進一步的控制:
for num in range(2,7):
print(num)
上面代碼會印出 2~6。
群集的長度
還有一個非常重要的內建函式,那就是 len
,此函數可以幫助我們求得一個群集的元素個數:
lst = [1,2,3,4,5]
print(len(lst))
dic = {1:1,2:2,3:4}
print(len(dic))
不論是清單的長度,或是字典的鍵值對個數,都可以用 len
來查到!
其餘的內建函式,讀者可以參考Python官網。