python括號生成 python生成器

2021-10-11 12:18:27 字數 2700 閱讀 5533

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 左括號個數...