python生成器是用來代替"不一定能夠使用全部元素的陣列",等到使用某一元素時,才生成該元素,用來節省空間.
python生成器寫法有兩種
第一種:(陣列生成式的中括號變成小括號)
# 生成器
arr = (x for x in range(1,6))
# 生成器下乙個元素用next()來取得
print("--next1--")
print(next(arr))
print("--next2--")
print(next(arr))
print("--next3--")
print(next(arr))
輸出結果:
--next1--
--next2--
--next3--
第二種方式: 使用關鍵字 yield 關鍵字
# 斐波那契數列生成器
def creatnum():
print("---開始執行生成器方法---")
a,b = 0,1
for i in range(0,5):
print("--step1--")
yield b
print("--step2--")
a,b = b,a+b
print("--step3--")
print("--..stop..--")
print("直接呼叫方法...")
print(creatnum())
#這裡用乙個識別符號來指向生成器(不要把creatnum()當做函式)
func = creatnum()
#一次生成
print("使用next呼叫")
x = next(func)
print(x)
#又一次生成
print("使用next呼叫")
x = next(func)
print(x)
print("使用next呼叫")
x = next(func)
print(x)
輸出結果:
直接呼叫方法...
使用next呼叫
---開始執行生成器方法---
--step1--
使用next呼叫
--step2--
--step3--
--step1--
使用next呼叫
--step2--
--step3--
--step1--
生成器還可以用 生成器.next 來呼叫,等價於 next(生成器)
如果使用next來呼叫,呼叫到生成器執行完畢,就會崩掉. 我們基本不會使用next來執行生成器
一般來說會用for迴圈來執行生成器:
# 斐波那契數列生成器
def creatnum():
print("---開始執行生成器方法---")
a,b = 0,1
for i in range(0,5):
print("--step1--")
yield b
print("--step2--")
a,b = b,a+b
print("--step3--")
print("--..stop..--")
print("直接呼叫方法...")
print(creatnum())
#這裡用乙個識別符號來指向生成器(不要把creatnum()當做函式)
func = creatnum()
#使用for迴圈來執行生成器
for i in func:
print(i)
輸出結果: (執行完畢不會崩潰)
直接呼叫方法...
---開始執行生成器方法---
--step1--
--step2--
--step3--
--step1--
--step2--
--step3--
--step1--
--step2--
--step3--
--step1--
--step2--
--step3--
--step1--
--step2--
--step3--
--..stop..--
在執行生成器時,可以使用 生成器.send(param) 方法
send方法不光是執行一步next操作,還會把send裡面的引數傳到生成器中充當yield表示式的返回值
**(注意:第一次執行,send裡面的引數應該為none,或者使用next方法)
def test():
i = 0
while i < 5:
temp = yield i
print(temp)
i += 1
t = test()
#先使用next執行,看能出來什麼結果
t.__next__()
t.__next__()
print(t.__next__())
#使用send執行
t.send("1231231231223123")
print(t.send("hahahahhahaha"))
輸出結果: (可見next輸出temp為none , 而send 則把值傳遞進了生成器)
none
none
hahahahhahaha
leetcode 括號生成(python)
題目 給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 思路 回溯法 class solution def generateparenthesis self,n int list str def generate item,le...
22 括號生成 python
給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 回溯法 括號生成問題的兩個重要性質 class solution def generateparenthesis self,n int list str 儲存合法結果 res 當...
括號生成(python實現
題目描述 示例 解題思路 回溯 通過確保每一步都能夠實現有效序列,盡早實現剪枝 我們首先找到回溯的出口條件 當左右括號都達到最大數量n時,加入結果集 接下來以左括號開始,不斷判斷兩個條件進行遞迴呼叫,直到滿足出口條件 1 左括號是否達到最大數量n 若小於,則使左括號數量加一,路徑加上 2 左括號個數...