目錄
二、表示式
生成器又可以叫自定義迭代器,若函式體包含yield關鍵字,再呼叫函式,並不會執行函式體**,得到的返回值即生成器物件
def func():
print('我是蒙奇d路飛')
yield 1
print('乙個要成為')
yield 2
print('海賊王的男人')
yield 3
# 呼叫階段
func() # 不會執行
g = func() # 把函式呼叫賦值給另外乙個函式
res = next(g) # 用next觸發函式體**執行,直到遇到yield停止,並將yield的返回值賦值給res
print(res) # 列印yield的返回值
res = next(g) # 再次呼叫,函式從上次暫停位置繼續執行,直到再次遇到yield停止...
print(res)
res = next(g) # 周而復始
print(res)
既然生成器物件屬於迭代器,那麼必然可以用for迴圈迭代
# 呼叫階段
for i in func():
print(i)
總結來說 只需要記住 當乙個函式體裡有yield的時候,再去呼叫函式,是不會執行裡面的**的,而是會生成乙個自定義迭代器(又叫:生成器),再用next才能觸發函式體**的執行
def weapons(name):
print('開始**')
while true:
x = yield
print('%s 開箱竟獲得了一把 %s' % (name, x))
g = weapons('湖北吳彥祖') # 拿到生成器物件
g.send(none) # 等同於next(g),讓生成器在x = yield處準備好,等待傳值
g.send('霜之哀傷') # 裡面的引數給yield,然後賦值給x,再列印,下次迴圈時又掛在yield處
g.send('火之高興') # 和上面一樣
g.send('一坨寂寞') # 樓上+1
# 執行結果
開始**
湖北吳彥祖 開箱竟獲得了一把 霜之哀傷
湖北吳彥祖 開箱竟獲得了一把 火之高興
湖北吳彥祖 開箱竟獲得了一把 一坨寂寞
def drinks():
list_a =
while true:
list_b = yield list_a
print(list_a)
a = drinks() # 獲得生成器物件
a.send(none) # 初始化生成器
a.send("百事可樂")
a.send("可口可樂")
a.send("嶗山可樂")
a.send("非常可樂")
# 執行結果
['百事可樂']
['百事可樂', '可口可樂']
['百事可樂', '可口可樂', '嶗山可樂']
['百事可樂', '可口可樂', '嶗山可樂', '非常可樂']
表示式可以讓**更加精簡,且不失可讀性。
# 需求:判斷x大於y時,返回x的值,否則返回y的值
x = 1
y = 2
if x > y:
print(x)
else:
print(y)
# 語法格式:條件成立要返回的值 if 條件 else 條件不成立返回的值
print(x if x > y else y) # 這就是三元表示式
# 需求:篩選出 帥逼人員的 名單
list1 = ['吳彥祖-帥逼', '彭于晏-帥逼', '周潤發-帥逼', 'poco-帥逼', '美國懂王-sb']
new_list = # 先定義乙個空列表
for name in list1: # for迴圈遍歷出list1的元素
if name.endswith('帥逼'): # 判斷是否以帥逼結尾
print(new_list)
# 列表生成器
new_list = [name for name in list1 if name.endswith('帥逼')]
print(new_list)
list1 = ['wyz-sg', 'pyy-sg', 'zrf-sg', 'wh-sg', 'mgdw-sb']
# 所有小寫字母變大寫
list1 = [name.upper() for name in list1]
# 所有名字去掉字尾sg
list1 = [name.strip('-sg') for name in list1]
# 案例1
keys = ['name', 'age', 'gemder']
dic =
print(dic)
# 案例2
items = [('name', 'poco'), ('age', 18), ('gender', 'male')]
res =
print(res)
keys = ['name', 'age', 'gemder']
set1 =
print(set1)
res = (i for i in range(5))
print(next(res))
print(next(res))
生成器表示式
生成器 生成器本質是迭代器,允許自定義邏輯的迭代器 迭代器和生成器區別 迭代器本身是系統內建的.重寫不了.而生成器是使用者自定義的,可以重寫迭代邏輯 生成器可以用兩種方式建立 1 生成器表示式 裡面是推導式,外面用圓括號 2 生成器函式 用def定義,裡面含有yield 1 生成器表示式 gener...
生成器 表示式
1.什麼是生成器?生成的工具。生成器是乙個 自定義 的迭代器,本質上是乙個迭代器。2.如何實現生成器但凡在函式內部定義了的yield,呼叫函式時,函式體 不會執行,會返回乙個結果,該結果就是乙個生成器。yield 每一次yield都會往生成器物件中新增乙個值。yield只能在函式內部定義 yield...
生成器表示式
把列表推導式的換成 就是生成器表示式 示例 把生一筐雞蛋變成給你乙隻老母雞,這也是生成器的特性 chicken 雞蛋 s item for item in range 10 print chicken 生成器物件記憶體位址 print next chicken 雞蛋0 print next chic...