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

2021-09-01 15:20:15 字數 1315 閱讀 8732

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

在python中有兩種表現形式,一種是以函式的形式yield(),二是生成器表示式

yield()函式:

def

test()

:yield

1g = test(

)print

(g)#輸出乙個生成器物件,需要next

print

(g.__next__())

#輸出1

三元表示式:

如果name==yibole,結果為true,則返回帥哥,else為sb

name =

'yibole'

'帥哥'

if name ==

'yibole'

else

'sb'

#前面的引數為二元 if開始為第一元 else開始第三元p

列表解析:

那雞生蛋為例子

egg_list =

for i in

range(10

):'egg%s'

%i)print

(egg_list)

#也可以寫成

['egg%s'

%i for i in

range(10

)if i>5]

#然後列印就好了

#主體是for迴圈,二元是雞蛋處理,三元是判斷條件

如果資料量很大會很佔記憶體,列表解析可以很方便的讓**生成出列表,但是缺點是佔記憶體

所以就可以衍生出:生成器表示式

(『egg%s』%i for i in range(10))

這時候再用__next__或者next()就可以了

這個就是生成器表示式

函式中yield就會幫你實現了生成器協議,除了做返回值以外還會把值變成可迭代物件

把列表解析的換成(),得到的就是生成器表示式,列表解析與生成器表示式都是一種便利的程式設計方式,只是聲稱其表示式更節省記憶體

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

sum(x**2) for x in xrange(4))

而不是多此一舉:

sum([x**2 for x in xrange(4)])

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

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

生成器表示式 三元表示式 列表解析

迭代器 s dog cat res s.iter print res.next print res.next 迭代器就是 iter laomuji 雞蛋 s i for i in range 10 生成器表示式不需要再呼叫iter res 雞蛋 s i for i in range 10 列表解析把...

生成器 三元運算 列表解析

一 什麼是生成器 可以理解為是一種資料型別,這種資料型別自動實現了迭代器協議 其他資料型別需要呼叫自身內建的 iter 方法 所以生成器是可迭代物件。二 生成器分類及在python中的表現形式 1 生成器函式 常規函式定義,但是,使用yield語句而不是return語句返回結果。yield語句一次返...