1、對比range和xrange的差別:
1
2
3
4
<code>>>> print range(10)</code>
<code>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]</code>
<code>>>> print xrange(10)</code>
<code>xrange(10)</code>
range()和xrange()的差別在于,range會在記憶體中建立所有指定的數字,而xrange不會立即建立,隻有在疊代循環時,才去建立每個數組。
這就類似于yield和return的差別
2、yield和return的差別
當定義一個函數時,如果函數的代碼出現了return,則函數立馬終止,并傳回結果。就算函數下面有多個return,也隻會傳回第一個return值。
示例:
5
6
7
<code>def func():</code>
<code> </code><code>return</code> <code>1</code>
<code> </code><code>return</code>
<code>print func()</code>
<code>1</code>
yield的原理:
<code>func1():</code>
<code> </code><code>I func1():</code>
<code> </code><code>I</code>
<code>2</code>
<code>3</code>
<code>當第一次循環是,擷取值1,此時yield不會退出函數,會記住yield 1這個位置,繼續執行函數,下一次就到yield2,在下一次到yield3</code>
return和yield的差別在于,return傳回結果後會跳出函數,不再執行函授後面的代碼,而yield不會跳出函數,并且會記住函數代碼執行位置,下次繼續執行。
xrange()的原理:
8
9
10
<code>def mrange(arg):</code>
<code> </code><code>seed = 0</code>
<code> </code><code>while</code> <code>True:</code>
<code> </code><code>seed =seed + 1</code>
<code> </code><code>if</code> <code>seed > arg:</code>
<code> </code><code>return</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>yield seed</code>
<code>for</code> <code>i </code><code>in</code> <code>mrange(10):</code>
<code> </code><code>print i</code>
每次執行一次循環,會生成一個值。知道seed>arg為止。
本文轉自 曾哥最愛 51CTO部落格,原文連結:http://blog.51cto.com/zengestudy/1827003,如需轉載請自行聯系原作者