##補充:列表生成器 1 #兩個理解例子 2 a=[x**2 for x in range(10)] #取x,然後執行x**2,在存放到列表裡面 3 print(a) #[0,1,4,9,16,25,36,49,64,81] 4 5 def f(n): 6 return n**2 7 a=[f(x) ...
##補充:列表生成器
1 #兩個理解例子 2 a=[x**2 for x in range(10)] #取x,然後執行x**2,在存放到列表裡面 3 print(a) #[0,1,4,9,16,25,36,49,64,81] 4 5 def f(n): 6 return n**2 7 a=[f(x) for x in range(10)] #取x,然後執行x**2,在存放到列表裡面View Code
##生成器
1 s=(x**2 for x in range(2,10)) #s就是一個生成器對象,生成器裡面沒有數據,只有調用才會有數據產生 2 print(s) #<generatorobject<genexpr>at0x0000025383953F10> 3 print(s.__next__()) #不用這個 4 print(next(s)) #用這個 5 for i in s: 6 7 print(i)View Code
上面是第一種創建方式
第二種使用yield創建
1 def f(): 2 print('ook') 3 yield 1 4 print('koo') 5 yield 2 6 g=f() 7 print(g) # <generatorobjectfat0x000001F2049F3F10>沒有顯示ok,沒有執行print。 8 print(next(g)) # 調用next才會執行print 9 10 print(next(g))View Code
補充:可迭代對象,內部有iter方法
生成器使用
1 def fib(max): 2 n, before, after = 0, 0, 1 3 while n < max: 4 before, after = after, before+after 5 n += 1 6 yield after 7 generator = fib(25) 8 for i in generator: 9 print(i,end=' ')View Code
1 def fib(max): 2 n, before, after = 0, 0, 1 3 while n < max: 4 before, after = after, before + after 5 n += 1 6 count = yield after 7 print(count) 8 generator = fib(25) 9 print(generator.send(None))#next(b),第一次send前如果沒有next,只能傳None 10 print(generator.send('aiq'))View Code
##通過yield偽併發,非重點,看明白就行(沒有找到例子)視頻。博客主要是我整理知識所用,所以我理解了,就沒有再去找例子了