python列表生成器语法_python列表生产式和生成器
1.列表生成式:通過簡潔的語法可以對一組元素進行過濾
格式:[exp for val in collection if condition]
例子1:
a = [x*xforxinxrange(1,10)ifx%2==0]
print(a)
1)append():
該方法用于在列表末尾添加新的對象,語法格式:
list.append(obj)
deffuncA():
list1 = []
forxinxrange(1,10):
ifx%2==0:
list1.append(x*x)
returnlist1
printfuncA()
結果:
[4, 16, 36, 64]
[4, 16, 36, 64]
說明:extend 表示把該對象里面的所有元素逐個地追加到列表的后面,參數需是可迭代對象!
2.生成器:一邊循環,一邊計算
方式一
把生產式中的[ ]修改成()
例子:
a = (x*xforxinxrange(1,10)ifx%2==0)
print(a.next())
print(a.next())
foriina:
print(i)
結果:
4
16
36
64
方式二
如果一個函數定義中包含yield關鍵字,那么這個函數就不再是一個普通函數,而是一個generator。包含yield語句的函數會被特地編譯成生成器。當函數被調用時,他們返回一個生成器對象,這個對象支持迭代器接口。每當遇到yield關鍵字的時候,你可以理解成函數的return語句,yield后面的值,就是返回的值。但是不像一般的函數在return后退出,生成器函數在生成值后會自動掛起并暫停他們的執行和狀態,他的本地變量將保存狀態信息,這些信息在函數恢復時將再度有效,下次從yield下面的部分開始執行。
說明:yield 是一個類似 return 的關鍵字,帶有yield的函數不僅僅只用于for循環中,而且可用于某個函數的參數
例子2:
defsum(x):
i=0
sum=0
whilei
sum+=i
i+=1
yield(sum)
foryinsum(5):
print(y)
print(type(sum(5)))
結果:
0
1
3
6
10
3.生成式和生成器的區別
前者直接返回了表達式的結果列表, 而后者是一個對象,該對象包含了對表達式結果的計算引用, 通過循環可以直接輸出。
當表達式的結果數量較少的時候, 使用列表生成式還好, 一旦數量級過大, 那么列表生成式就會占用很大的內存。
而生成器并不是立即把結果寫入內存, 而是保存的一種計算方式, 通過不斷的獲取, 可以獲取到相應的位置的值,所以占用的內存僅僅是對計算對象的保存。
例子:
1)列表生成式,這里是中括號
[x*x for x in range(0,10)]
結果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
2)生成器, 這里是小括號
(x*x for x in range(0,10))
結果:
at 0x7f0b072e6140>
生成器使用時,需如下執行:
g = (x*x for x in range(0,10))
for n in g:
print n
結果:
0
1
4
9
16
25
36
49
64
81
4.print、return和yield的區別
def func1():
for i in range(1, 5):
print i
def func2():
for i in range(1, 5):
return i
def func3():
for i in range(1, 5):
yield i
func1()
print func2()
print func3()
說明:
1.print并不會阻斷程序的執行
2.func2()方法中的循環執行第一次就被return結束掉(后面的2、3、4就不會有返回的機會了)
3.yield你可以通俗的叫它"輪轉容器",可用現實的一種實物來理解:水車,先yield來裝入數據、產出generator object、使用next()來釋放;好比水車轉動后,車輪上的水槽裝入水,隨著輪子轉動,被轉到下面的水槽就能將水送入水道中流入田里
例子:
def func3():
for i in range(1,5):
yield i #裝入
gob = func3() #generator 類型
print next(gob) #1 釋放的第一個裝入的數據,(先入先出)
print next(gob) #2
print next(gob) #3
print next(gob) #4
print next(gob) #報錯
例子:九九乘法表
defjiujiu1(m):
foriinxrange(1,m+1):
print"%d * %d = %d "% (m,i,m*i),
defjiujiu2():
forjinxrange(1,10):
jiujiu1(j)
jiujiu2()
結果:
1 * 1 = 1
2 * 1 = 2 2 * 2 = 4
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49
8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64
9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python列表生成器语法_python列表生产式和生成器的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 广电运通不好进吗_我可以说郑州新风的安装
- 下一篇: 三万字速通SSM框架入门知识点,快速上手
