day12 生成器和各種推導式

2022-09-18 05:18:31 字數 2021 閱讀 5200

今天主要學習了

1.生成器 

2.生成器函式

3.各種推導式(比較詭異,理解了很簡單,不理解很難)

4.生成器表示式(重點)

一.生成器  

def func():

print'我叫周潤發'

return '林志玲' #return在函式中表示返回的意思

set=func()

print(set)

這裡的set 就是建立了乙個生成器   注意:  (大坑) 生成器函式執行之後,產生了乙個生成器,而不是執行函式

本質就是個迭代器 ,乙個乙個的建立物件

建立生成器的方法 :

1.生成器函式 

2. 通過生成器表示式來獲取生成器

3. 型別轉換 (前期基本上看不到,後期才接觸)

二 .生成器函式 :

生成器函式中包含了yield ,返回資料和return差不多 ,但是yield不會終止函式,

yield :  可以分段執行乙個函式

return : 執行後會立即結束這個函式的執行

生成器函式會在執行的時候返回生成器 ,而不是執行此函式

能夠向下執行的2個條件 :

1 . __next__() 執行到下乙個yield 

所有的生成器都是可迭代的 ,也就是說都可以直接使用for迴圈 

都可以使用list()函式來獲取到生成器內所有的資料 .

生成器中記錄的是**而不是函式的執行

def func():

print'我的天啊'

yield '天吶'

gen=func() # 建立生成器. 此時執行會把生成器函式中的**記錄在記憶體 ,當執行到__next__(),

執行此空間中的**,執行到yield結束.

生成器函式的特點:

優點:  節省記憶體 , 生成器本身就是**,幾乎不占用記憶體 

特點: 惰性機制 ,只能向前,不能後退

三 .各種推導式 

列表的推導式   lis=[結果 for迴圈 if條件]

# 想知道老男孩一共開了多少期

lst=['python%s期'%i for i in range(1,19)]

print(lst)

# 生成列表.類表中裝的資料是 1-100之間所有的偶數的平方

lst=[i**2 for i in range(1,101) if i%2==0]

print(lst)

字典的推導式   dic=

dic= 

# 把字典的key和value互換, 生成新字典

d=print(d)

集合的推導式   set=

集合的推導式和字典一樣 ,只不過字典返回的值有k,v ,而集合只有乙個返回值

注 :  元組沒有推導式

四 .生成器表示式 (重點)

(結果 for迴圈 if條件)

g=(結果 for i in range(10))

print(g) #at 0x0000000009e573b8>

g=(i for i in range(10) ) #生成器表示式

# 生成器函式

# def func():

# print(111)

# yield 222

## g = func() # 建立生成器

# g1 = (i for i in g) # 生成器表示式

# g2 = (i for i in g1) # 生成器表示式

## #

# print(list(g)) #list 裡面有__next__一次性將func中的內容全部拿空

# print(list(g1)) # for -> __next__()

# print(list(g2))

結果 [222] #原因 : g已經將func的內容拿空了,g1 ,g2在想拿的時候已經沒有了,

所以為空列表

day 12 函式生成器

一 1.迭代器 iter next 生成器 本質就是迭代器,兩種方式寫生成器 1 生成器函式 2 生成器表示式 2.生成器函式 函式內部由yield.yield返回 return yield可以把函式分段執行,生成器函式被呼叫的時候,返回生成器。def func yield g func 得到生成器...

day12學習筆記(列表推導式 生成器 迭代器

迭代器iterator 列表推導式又稱之為列表解析式,運用列表解析式,可以快速生成list,可以通過乙個list推導出另乙個list,而 卻十分簡潔。經典語法 語法結構 每個列表推導式都在 for 之後跟乙個表示式,然後有零到多個 for 或 if 子句。列表推導式的執行順序 各語句之間是巢狀關係,...

生成器,生成器推導式和列表推導式

python社群,大部分生成器和迭代器是一種 生成器的本質是迭代器 唯一區別 生成器是我們自己用python 構建的資料結構 迭代器都是提供的,或者轉化得來的 生成器函式 生成器表示式 python提供的 yield 乙個next 對應乙個yield yield和下乙個yield中間有 的話只執行乙...