# Python 部分語法筆記 ## 目錄 > :::spoiler 清單 > [TOC] > ::: --- IO --- ### 標準輸入輸出 - 輸入 > 所有輸入都會自動以string保存 - input( ["instructions"] ) > 讀取單行資料,省略結尾'\n' > 可輸入說明文字 (括號內容會被輸出) - stdin > 需要從終端機上讀取大量資訊或從檔案讀取內容,直到EOF時使用 - sys.stdin.read() > 讀取所有輸入資料直到EOF,包含結尾'\n' - sys.stdin.readline() > 讀取單行資料,包含結尾'\n' - sys.stdin.readlines() > 讀取多行資料,以'\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 ```python while True: a, b = map(int, input().split()) ``` > for不需要接收拆分值時 ```python for _ in range(10): # code #即_無意義 ``` > 將n行字串串起 ```python n = int(input()) tmp = [input().strip() for _ in range(n)] Str = "".join(tmp) ``` > 輸入寫入dict(字典) ```python 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 (資料結構) > 符合三要件: > 1. 有順序的對data structure進行迭代 > 2. 每次迭代回傳的結果取得value,還能知道是否還能進行下一次的迭代 > 3. 對於取得迭代的value,有明確且一致的執行邏輯 > > e.g., > ```python > 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,並符合三要件: > 1. 沒有parameter(參數)的傳遞 > 2. 具有done的Attribute,return bool表示物件是否迭代完成 > 3. 具有value的Attribute,每次迭代後取得的value - property > 一種特殊的Attribute,對屬性的訪問和設置進行更多的控制。與物件狀態有關的操作會封裝為property,以便後續維護維護。當訪問或設置property時,會調用了相應的Getter或Setter的Method,可以對屬性的值進行驗證、轉換或計算等操作 - yield > 產生,類似return的效果,但回傳的是generator,且函數會被暫停執行直到下一次迭代 > generator + yield相當於將for...in功能分離,以便更精準的操作及降低記憶體占用 --------------------------- ```python ``` --- ###### tags: `Python`