# 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`