所有輸入都會自動以string保存
input( ["instructions"] )
讀取單行資料,省略結尾'\n'
可輸入說明文字 (括號內容會被輸出)
stdin
需要從終端機上讀取大量資訊或從檔案讀取內容,直到EOF時使用
讀取所有輸入資料直到EOF,包含結尾'\n'
讀取單行資料,包含結尾'\n'
讀取多行資料,以'\n'作為分隔存入list,包含結尾'\n',每個item都包含結尾'\n'
加上.strip()可以去除結尾'\n'
print( 'string'[,'string']…[,sep='(string)'][,end='(string)'] )
sep為逗號隔開的間隔字元或字串,預設為' '
end為結尾字元或字串,預設為'\n'
print(f'string')
Formatted string literals常見的使用方式,可以加入Replacement field
{}
,可以填入任何python表達式,包含lambda,亦可以使用print(f'''string''')的格式放入多行字串
當內容需要顯示
{
或}
時,可以用{{
或}}
呈現單個大括號
以a b的方式輸入多行直到EOF
while True:
a, b = map(int, input().split())
for不需要接收拆分值時
for _ in range(10):
# code
#即_無意義
將n行字串串起
n = int(input())
tmp = [input().strip() for _ in range(n)]
Str = "".join(tmp)
輸入寫入dict(字典)
dict = {}
for _ in range(n):
name, score = input().split()
score = int(score)
dict[name] = score
Attribute
屬性,物件中的命名值,存儲物件的狀態。可以使用「點(.)」來訪問。分為以下三種命名方式:
1. public:沒有底線作為前綴,可以全域訪問
2. protected:單底線前綴(_variable 或 _method),只能在def的class或subclass中訪問
3. private:雙底線前綴:(__variable 或 __method),只能在def的class中使用,無法被subclass或外部訪問,若發生名稱衝突,解譯器會自動重命名這些變量以確保其優先級最高。
element
元素,一般指還沒有歸屬(尚不屬於某個容器內的元素),或即將加入容器的元素
如:加入一個element到list
generator
生成器,一種特殊的iterator,產生的value只能訪問一次(即從記憶體釋放)
item
元素,一般指容器中的的元素,如list中已經存在的其中一個項目
如:移除list中的一個item
iterable
可迭代物件,一個容器或序列,可以產生iterator,可以遍歷其中的items,不必是data structure (資料結構)
符合三要件:
- 有順序的對data structure進行迭代
- 每次迭代回傳的結果取得value,還能知道是否還能進行下一次的迭代
- 對於取得迭代的value,有明確且一致的執行邏輯
e.g.,
x = [1, 2, 3] y = iter(x) z = iter(x) #此例x, y, z都是iterable,但只有x是data structure (list)
屬於iterable的容器包含:list, str, tuple, set, map, etc.
不是所有容器都屬於iterable
iterator
迭代器,iterable中的物件,透過執行後回傳的結果,取得每次的value和迭代狀態,至少需要使用next method,並符合三要件:
- 沒有parameter(參數)的傳遞
- 具有done的Attribute,return bool表示物件是否迭代完成
- 具有value的Attribute,每次迭代後取得的value
property
一種特殊的Attribute,對屬性的訪問和設置進行更多的控制。與物件狀態有關的操作會封裝為property,以便後續維護維護。當訪問或設置property時,會調用了相應的Getter或Setter的Method,可以對屬性的值進行驗證、轉換或計算等操作
yield
產生,類似return的效果,但回傳的是generator,且函數會被暫停執行直到下一次迭代
generator + yield相當於將for…in功能分離,以便更精準的操作及降低記憶體占用
Python