今天主要學習了
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中間有 的話只執行乙...