生成器 三元運算 列表解析

2021-08-20 12:23:58 字數 2232 閱讀 5000

一、什麼是生成器

可以理解為是一種資料型別,這種資料型別自動實現了迭代器協議(其他資料型別需要呼叫自身內建的__iter__方法),所以生成器是可迭代物件。

二、生成器分類及在python中的表現形式

1、生成器函式:

常規函式定義,但是,使用yield語句而不是return語句返回結果。yield語句一次返回乙個結果,在每個結果中間,掛起函式狀態,以便下次從它離開的地方繼續執行。

def test():

yield 1

g = test()

print(g)

print(g.__next__())

1

不同於return可以yield多個值,因為是可迭代物件所以有next方法

2、生成器表示式:類似於列表推導,但是生產器返回按需要產生結果的乙個物件,而不是一次構建乙個結果列表。

三、三元表示式,如果表示式成立返回前面的值否則返回後面的值

name='zhangsan'

print('sb' if name == 'zhangsan' else '帥哥')

四、列表表示式。

#使用for迴圈實現生雞蛋

egg_list=

for i in range(10):

print(egg_list)

#使用列表表示式生雞蛋

l=['雞蛋%s'%i for i in range(10) ]

print(l)

['雞蛋0', '雞蛋1', '雞蛋2', '雞蛋3', '雞蛋4', '雞蛋5', '雞蛋6', '雞蛋7', '雞蛋8', '雞蛋9']

['雞蛋0', '雞蛋1', '雞蛋2', '雞蛋3', '雞蛋4', '雞蛋5', '雞蛋6', '雞蛋7', '雞蛋8', '雞蛋9']

使用for迴圈和列表表示式生成是結果是一樣的

使用三元表示式加乙個if判斷條件(三元表示式可以是三元也可以是二元,但是不能是四元)

l=['雞蛋%s'%i for i in range(10) if i>5]

print(l)

['雞蛋6', '雞蛋7', '雞蛋8', '雞蛋9']

以上使用表示式生成的列表直接在記憶體中,可以使用生成器表示式

egg_list=['雞蛋%s'%i for i in range(10)]

laomuji=('雞蛋%s'%i for i in range(10))

print(laomuji)

print(next(laomuji)) #next的本質就是呼叫__next__

print(laomuji.__next__())

print(next(laomuji))

at 0x000001d39c97f3b8>

雞蛋0雞蛋1

雞蛋2

ps 不能無限制的next,因為定義生產器的時候定義了範圍0-9,所以最多九個雞蛋

總結:1、列表解析的換成()得到的就是生產器表示式

2、列表解析和生成器表示式都是一種便利的程式設計方式,只不過生產器表示式跟節省空間

3、python不但可以通過迭代器協議讓for迴圈變得更加通用。大部分內建函式,也是使用迭代器協議訪問物件的。列如,sum函式是python的內建函式,該函式使用迭代器協議訪問物件,而生成器實現了迭代器協議,所以,我們可以直接計算一系列的和。

print(sum( i for i in range(10)))

45

ps 生成器只能遍歷一次,(for、next、list等操作均為遍歷),一次遍歷以後裡面的值為空了

#定義生成器函式遍歷0 1 2 3

def test():

for i in range(4):

yield i

#生成器函式執行賦值給t

t=test()

#列表表示式賦值

t1=(i for i in t)

t2=(i for i in t1)

print(t1)

#遍歷輸出[0, 1, 2, 3]

print(list(t1))

#因為t1已經遍歷過一次了使用遍歷t2輸出為乙個空列表

print(list(t2))

at 0x0000020a158d3938>

[0, 1, 2, 3]

三元運算,生成器表示式,列表解析

生成器是可迭代物件,可以理解成為一種資料型別,這種資料型別自動實現了迭代器協議 其他的資料型別需要呼叫自己內建的 iter 方法 在python中有兩種表現形式,一種是以函式的形式yield 二是生成器表示式 yield 函式 def test yield 1g test print g 輸出乙個生...

三元運算,列表解析,生成器表示式

一,生成器就是可迭代物件,可以理解為一種資料型別,這種資料型別自動實現了迭代器協議。1.生成器函式 常規函式定義,但是使用yield語句而不是return語句,yield可以返回多個值。可以保留函式的執行狀態。2.第二行的式子稱為 三元表示式 沒有四元表示式,可以兩元 name alex res h...

190329迭代器 生成器 三元運算 列表解析

可迭代物件 遵循迭代器協議,即可迭代物件,可以被for迴圈的就是可迭代物件 l iter l l.iter 將列表轉換為迭代器 print iter l.next print next iter l 1 生成器函式def f for i in range 10 yield i t f print t...