內建函式庫與標準函式庫
Python 內建許多必要的函式,像是 input()、print() 與 len() 等,除此之外還有一些常用的函式庫,視需要再 import 即可,稱為標準函式庫,像是 math 或者 random。import math import math,random
from import
類似 Java 的 static import,一般使用 import 語法,在呼叫外部函式時,得加上函式庫名稱,但是改用 from import 後,就可以之接呼叫外部函式庫的函式,不用再加上函式庫名稱。但實務上容易搞混,分不清這個函式是內建的或者來自某個函式庫,所以很少使用,或者只用在函式庫「路徑非常長」時。
from random import * for i in range(10): print(randint(1, 5))
input()
input() 回傳的是 str 型別,不管使用者輸入的內容是什麼,即使是整數,也是得到型別為 str 的值。
>>> v = input() This is a string. >>> v 'This is a string.' >>> v = input() 100 >>> v '100' >>> v = input() True >>> v 'True'另外 input() 可以接受提示字。
name = input('Please input your name:\n') # 換行輸入 print('Hello ' + name) name = input('Please input your name: ')# 同一行輸入 print('Hello ' + name)執行結果。
Please input your name: Neil Hello Neil Please input your name: Neil Hello Neil
print()
輸出內容,不傳入參數會輸出一空白行。
>>> print('Hello') Hello >>> print('') >>> print()print() 有兩個關鍵字參數。
- end:輸出的結尾字元,預設為換行字元,可以用來取代換行為空白、逗號或者 nothing。
- sep:print() 可以同時傳入 N 的參數,print() 會以空白字元串起來後再輸出
print('Apple', 'Banan', 'Pineapple', sep=', ') # Apple, Banan, Pineapple
len()
可以傳入 str、list、tuple,否則報錯,用來取得傳入 str 的字元數或者 list 與 tuple 的 item 數。
>>> len('Hello') 5 >>> len('99.99') 5 >>> len(5) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'int' has no len()
eval()
執行動態語法,但只能執行 expression,不能執行 statement,expression 與 statement 簡單的判斷差別就是 expression 不能有 =。x = 1 print(globals()['x']) # 1 print(eval('x + 1')) # 2,預設在「所在環境」執行,即 global print(eval('x + 1', globals())) # 2,指定使用預設的 global 環境執行,效果同上 # print(eval('x + 1', {})) # NameError,x 未定義 print(eval('x + 1', { 'x': 2 })) # 3,指定使用客制的 global 環境執行 g = globals(); g['x'] += 1 print(x) # 2,x 改了唷 print(eval('x + 1', g)) # 3,指定使用客制的 global 環境執行 x = 1 print(globals() == locals()) # True,在 global 環境下,global() 與 locals() 是相同的 print(locals()['x']) # 1 print(eval('x + 1', None, locals())) # 2,指定使用預設的 local 環境執行 print(eval('x + 1', None, {})) # 2,指定使用客制的 local 環境執行 print(eval('x + 1', None, { 'x': 3 })) # 4,指定使用客制的 local 環境執行 loc = locals() loc['x'] += 1; print(x) # 2,x 改了唷 print(eval('x + 1', None, loc)) # 3,指定使用客制的 local 環境執行 print(eval('x + 1', { 'x': 2 }, { 'x': 3 })) # 4,同時指定 global 與 local 環境時,先從 local 再到 global 查找變數 print(eval('x + 1', { 'x': 2 }, { })) # 3,同時指定 global 與 local 環境時,先從 local 再到 global 查找變數 # print(eval('x = x + 1')) # SyntaxError,不能使用指定語法
exec()
執行動態語法,可以執行 statement,和 eval() 一樣可以傳入 global 與 local 環境。x = 1 print(exec('x = x + 1')) # None print(x) # 2 print(exec('x + 1')) # None,都是回傳 None 唷
repr()
不是很懂的一個函式,在某些型別(str)會回傳和 str() 不一樣的字串,但某些型別(list, tuple...)卻回傳一樣的字串。print('hello') # hello print(repr('hello')) # 'hello' print(['hello']) # ['hello'] print(repr(['hello'])) # ['hello'] print(('hello',)) # ('hello',) print(repr(('hello',))) # ('hello',) class a: def __init__(self): pass print(a()) # <__main__.a object at 0x01FAD230> print(repr(a())) # <__main__.a object at 0x01FAD230>在自訂 class 回傳的也不一樣,但分別可以透過 __str__() 與 __repr__() 自訂回傳的字串。
class b: def __str__(self): return 'b' print(b()) # b print(repr(b())) # <__main__.b object at 0x01F0F110> class c: def __str__(self): return 'c.str' def __repr__(self): return 'c.repr' print(c()) # c.str print(repr(c())) # c.repr目前理解是 str() 回傳的是給人看的字串,repr() 回傳的是給直譯器(也就是 eval())讀的字串。
# print(eval('hello')) # NameError: name 'hello' is not defined print(eval(repr('hello'))) # hello print(eval("['hello']")) # ['hello'] print(eval(repr("['hello']"))) # ['hello']
any() & all()
傳入 Iterable 物件,使用真值判斷,只要一個為真,any() 回傳 True,必須全部為真,all() 才會回傳 True。
print(any([ 0, 0.0, False, ''])) # False print(any([ 0, 0.0, False, 'A'])) # True print(any([ ])) # False print(all([ 0, 0.0, False, ''])) # False print(all([ 1, 1.5, True, 'A'])) # True print(all([ ])) # True但是 any() 與 all() 對空集合有不同的反應,至少要一個為真的 any() 回傳 False,而全部要為真的 all() 卻回傳 True。
官方文件
數學函式庫 math
在使用任何內建以外的函式庫前要先 import,接下來就可以使用該函式庫名稱加上「點」語法,就可以呼叫函式庫內的函式(function)。>>> import math >>> math <module 'math' (built-in)> >>> math.pi 3.141592653589793 >>> math.sqrt(2) 1.4142135623730951
隨機函式庫 random
官方文件。import random print(random.random()) # 0 <= x < 1 print(random.randint(5, 10)) # 5 <= x <= 10,比較特別是包括 10 print(random.choice(tuple('Python'))) # P ~ n,直接丟 sequence 進去,就不用管 index 了最常用的為 random.randint(start, end),start 與 end 都是包含的。
import random fruits = ['Apple', 'Banana', 'Tomoto'] for i in range(3): print(fruits[random.randint(0, len(fruits)-1)])
系統函式庫 sys
sys.exit() 可以提前結束程式,Ctrl + C 是從外部結束程式,sys.exist() 是從程式內部發起的,一般是搭配條件判斷決定是否提前結束。
------
---
沒有留言:
張貼留言