a = [1,2,3,4,5,6,7,8]#每個元素遞加1
a = [i+1 for i in a ]#
這就是列表生成公式
(a)#
優點**簡潔
a1 =(i for i in range(5))#編寫生成器,a1 裡面記錄的是計算公式
print(a1)#
列印公式 generator 就是生成器的意思
print(next(a1))#
取值print(next(a1))#
每次只能取乙個,不能回退不能切片#輸出
at 0x000001c58902feb8>0
1
使用生成器實現 斐波那契數列 (斐波那契數列 ,就是除了前兩位,後面所有的數都是前兩位的和 例如 1 1 2 3 5 8 )
deffunc(max):
n,a,b = 0,0,1 #
對應賦值
while n #
判斷列印次數
print(b)#
列印值 a,b = b,a+b#
a等於b,b等於 舊a加 b
n += 1 #
計數器return
'done
'func(15)#輸出
1123
581321
3455
89144
233377
610
生成器版本 斐波那契數列
deffunc(max):
n,a,b = 0,0,1 #
對應賦值
while n #
判斷列印次數
yield b #
把函式的執行過程凍結在這一步,並且把b的值返回給外面的next()
print(b)#
列印值 a,b = b,a+b#
a等於b,b等於 舊a加 b
n += 1 #
計數器return
'done'#
優點,可以在執行過程中返回值。
f =func(15)
next(f)
next(f)
next(f)
next(f)#輸出
112
#在python2 裡面 range = list xrange = 生成器
#在python3 裡面 range =生成器 沒有xrange
生成器的建立方式
1、列表生成式 () #最多只能用三元運算
2、函式
yield vs return
1、return 返回並終止函式
2、yield 返回資料,並凍結當前的執行過程。。。#如果函式裡面出現了yield 該函式就變成了生成器。
3、next 喚醒當前程序執行過程,並向程式傳送none 繼續執行,到下乙個yield凍結。
4、send 喚醒並繼續執行程式,傳送乙個資訊到生成器內部。
#學習鏈結
學習鏈結
凡是可作用於for
迴圈的物件都是iterable
型別;
凡是可作用於next()
函式的物件都是iterator
型別,它們表示乙個惰性計算的序列;
集合資料型別如list
、dict
、str
等是iterable
但不是iterator
,不過可以通過iter()
函式獲得乙個iterator
物件。
python的for
迴圈本質上就是通過不斷呼叫next()
函式實現的
for x in [1, 2, 3, 4, 5]:pass
#實際上等價於
#首先獲得iterator物件:
it = iter([1, 2, 3, 4, 5])
#迴圈:
while
true:
try:
#獲得下乙個值:
x =next(it)
except
stopiteration:
#遇到stopiteration就退出迴圈
break
列表生成式 生成器 迭代器
1 列表生成式,可以在前邊加入表示式或者函式 a x 2 for x in range 10 print a def f n return n n n b f x for x in range 10 print b 2 a.生成器,每次使用得時候才會計算,每次只能取下乙個而不能跳躍取值.生成器就是乙...
列表生成式 生成器 迭代器
列表生成式 可以直接在列表裡進行運算 生成器 一邊迴圈一邊計算的機制,稱為生成器 generator 就是生成乙個不執行的函式或者列表,即資料流 第二句 生成器與列表的區別 生成器你不知道長度,就是乙個資料流 list dict str你知道長度 迭代器 可以被next 函式呼叫並不斷返回下乙個值的...
列表生成式,列表生成器
coding utf 8 列表生成式是快速生成乙個列表一些公式 numbers for x in range 0,101 print numbers 要放入列表資料 簡單的表示式 1 表示式 2 x for x in range 0,101 for 迴圈遍歷出來的值,放入列表中 numbers x ...