---
# System prepended metadata

title: python生成式
tags: [Python]

---

# python生成式
###### tags: `Python`

在python語法中有個很有趣的寫法

### 建立一個串列(List)內含整數型態(Int)1~9

```python=
[x for x in range(9999999)]
```

這寫法就像是合併了以下常見作法

但卻又一行程式及完成

```python=
t = []
for v in range(9999999):
    t.append(v)
print(t)
```

這寫法在python中命名為`Generator Expression`

其實不知道中文講法該叫什麼姑且稱他為`生成表達式`吧

###  "This made the function easier to write and much more clear than an approach using instance variables"



---

還有一東西叫Generator

中文給它取名為`生程式`，寫法如下

```python=
def reverse(data):
    for i in range(len(data)-1, -1, -1):
        yield data[i]
```

使用函式會返還`生成物件`

```python=
print((reverse("apple")))
```

這樣的使用方式並不正確，應該要

```python=
r = reverse("apple")
for ch in r:
    print(ch)
```

yield就像是return一樣但差別在於next()一次才返還一次值

這生成式就像是遞迴函式一樣

在呼叫一次試看看

```python=
for ch in r:
    print(ch)
```

理所當然無法得到任何值，因為它不再執行

### 也可以搭配Generator Expression使用

```python=
[x for x in reverse("apple")]
```

[參考](https://docs.python.org/3/tutorial/classes.html#generators)
