在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.安裝自定義生成器 建立好自定義生成器後將生成...