函式式程式設計 列表生成式 生成器 迭代器

2022-05-09 23:49:42 字數 2269 閱讀 2216

a = [1,2,3,4,5,6,7,8]

#每個元素遞加1

a = [i+1 for i in a ]#

這就是列表生成公式

print

(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  )

def

func(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

生成器版本 斐波那契數列

def

func(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型別,它們表示乙個惰性計算的序列;

集合資料型別如listdictstr等是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 ...