天天看點

7.5-7.6 清單生成式和生成器以及差別

一、清單生成式是 python 受歡迎的文法之一

通過一句簡潔的文法就可以對一組元素進行過濾

還可以對得到的元素進行轉換處理。

1

2

3

4

5

6

7

8

9

10

<code>li </code><code>=</code> <code>[x </code><code>+</code> <code>x </code><code>for</code> <code>x </code><code>in</code> <code>range</code><code>(</code><code>1</code><code>, </code><code>101</code><code>) </code><code>if</code> <code>x </code><code>%</code> <code>2</code> <code>=</code><code>=</code> <code>0</code><code>]</code>

<code>print</code><code>(li)</code>

<code>def</code> <code>funa(x):</code>

<code>    </code><code>a</code><code>=</code><code>[]</code>

<code>    </code><code>for</code> <code>x </code><code>in</code> <code>range</code><code>(</code><code>1</code><code>, </code><code>101</code><code>):</code>

<code>        </code><code>if</code> <code>x </code><code>%</code> <code>2</code> <code>=</code><code>=</code> <code>0</code><code>:</code>

<code>            </code><code>a.append(x</code><code>+</code><code>x)</code>

<code>    </code><code>return</code> <code>a</code>

<code>print</code><code>(funa(</code><code>1</code><code>))</code>

二、清單生成器

1、最簡單的辦法,把原來的生成式的 [] 換成 () 就 ok 了

<code>lt</code><code>=</code><code>(x</code><code>*</code><code>x </code><code>for</code> <code>x </code><code>in</code> <code>range</code><code>(</code><code>1</code><code>,</code><code>11</code><code>) </code><code>if</code> <code>x</code><code>%</code><code>2</code><code>=</code><code>=</code><code>0</code><code>)</code>

<code>print</code><code>(</code><code>list</code><code>(lt))</code>

<code>print</code><code>(</code><code>type</code><code>(lt))</code>

<code>for</code> <code>i </code><code>in</code> <code>lt:</code>

<code>    </code><code>print</code><code>(i)</code>

2、函數中定義清單生成器

11

<code>def</code> <code>fib(n):</code>

<code>    </code><code>sum</code><code>=</code><code>0</code>

<code>    </code><code>i</code><code>=</code><code>0</code>

<code>    </code><code>while</code><code>(i&lt;n):</code>

<code>        </code><code>sum</code><code>=</code><code>sum</code><code>+</code><code>i</code>

<code>        </code><code>i</code><code>+</code><code>=</code><code>1</code>

<code>        </code><code>yield</code> <code>(</code><code>sum</code><code>)</code>

<code>print</code><code>(</code><code>type</code><code>(fib(</code><code>10</code><code>)))</code>

<code>for</code> <code>x </code><code>in</code> <code>fib(</code><code>10</code><code>):</code>

<code>    </code><code>print</code><code>(x)</code>

生成器和生成式的差別:

1、清單生成式,一次性生成所有的資料,然後儲存在記憶體中,适合小量的資料

2、生成器,傳回一個可以疊代的對象,及 'generator' 對象,必須通過循環才可以一一取出是以的結果

3、可疊代對象,可以通過循環調用出來的,就是可疊代的對象 [] () {} 生成式 生成器

4、疊代器  生成器,必須通過 next() 調用的,被 next() 函數調用并不斷傳回下一個值得對象稱為疊代器

 本文轉自 歸來仍少年 51CTO部落格,原文連結:http://blog.51cto.com/shaoniana/1980559