Python 自定義生成器

2021-08-21 17:54:14 字數 1890 閱讀 9597

在python中,一邊迴圈一邊計算的機制,稱為生成器(generator)。

通過yeild 表示式定義生成器

yield一次返回乙個結果,並且會凍結當前函式的狀態

def my_gen():

yield 1

yield 2

yield 3

next函式可以迭代生成器的返回值 

生成器其實也是迭代器也是可迭代物件,可以使用next方法獲取可迭代物件

ret = my_gen()

print(next(ret)) #ret值為1

print(next(ret)) #ret值為2

print(next(ret)) #ret值為3

利用生成器遍歷輸出乙個1~100000的序列

前面說生成器是迭代器也是可迭代物件,那麼可以使用next方法也可以用for in 遍歷

def my_gen(start,end):

index = start

while index <= end:

yield index

index+=1

ret = my_gen(1,100000)

for x in ret:

print(x)

這樣就不必建立完整的list,從而節省大量的空間

生成斐波那契數列 1 1 2 3 5 .....

def fib(count):

index = 1

a,b = 0,1

while index <= count:

yield b

c = b

b = a + b

a = c

index +=1

num = fib(5)

for x in num:

print(x)

多工同步進行

利用生成器,將兩個任務進行往復的切換(這樣就達到了`多程序`的效果),直到任務結束。

def music(count):

index =0

while index <= count:

print('任務一%d次' % index)

index +=1

yield none

raise stopiteration()

def movie(count):

index =0

while index <= count:

print('任務二%d次' % index)

index +=1

yield none

raise stopiteration()

def main():

music_iter = music(10)

movie_iter = movie(20)

music_stop = false

movie_stop = false

while true:

try:

next(music_iter)

except stopiteration:

print('任務一結束')

music_stop = true

try:

next(movie_iter)

except stopiteration:

print('任務二結束')

movie_stop = true

if music_stop and movie_stop:

break

if __name__ == '__main__':

main()

Sharding JDBC 自定義主鍵生成器

官方文件分布式主鍵 sharding jdbc提供了兩種主鍵生成策略uuid snowflake,預設使用snowflake,還抽離出分布式主鍵生成器的介面org.apache.shardingsphere.spi.keygen.shardingkeygenerator,方便使用者自行實現自定義的自...

Mybatis plus 自定義ID生成器

雪花演算法生成唯一的有序的序列號 public class snowflakeutils if machineid max machine num machineid 0 this datacenterid datacenterid this machineid machineid 產生下乙個id ...

編寫自定義Yeoman生成器簡述

1.安裝生成器 yeoman提供了generator generator方便快速編寫自己的生成器。安裝 npm install g generator generator 執行 yo generator 輸入要自定義生成器的名字後會建立好生成器的架子 2.安裝自定義生成器 建立好自定義生成器後將生成...