一、清單生成式是 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<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