Python 初學筆記 第二章 生成器

2022-07-10 02:36:15 字數 2708 閱讀 6815

目錄可以直接被 for 迴圈的物件稱為可迭代物件(iterable),意思就是可遍歷的。

from collections.abc import iterable, iterator

for i in 'abc':

print(i)

print(issubclass(str, iterable))

print(issubclass(str, iterator))

abc

true

false

可以被 next() 函式呼叫(也就是實現了 __iter__ 和 __next__ 方法)並不斷返回下乙個值的物件稱為迭代器(iterator),迭代器都

是可迭代物件,迭代器是訪問元素集合的一種方式,訪問時呼叫 next() 的時候才返回下乙個值,如果容器中沒有更多元素了,則丟擲 stopiteration

異常,所以它是惰性計算序列,更節省空間。

from collections.abc import iterable, iterator

# 迭代器

class foo:

def __init__(self):

self.prev = 0

self.curr = 1

def __iter__(self):

# print('iter')

return self

def __next__(self):

# print('next')

self.curr, self.prev = self.prev + self.curr, self.curr

return self.curr # 需要返回值給 i

foo = foo()

for i in foo:

if i > 20:

print(i)

break

print(i)

print(next(foo))

print(issubclass(foo, iterable))

print(issubclass(foo, iterator))

123

581321

34true

true

生成器(generator)都是迭代器的物件,所以本質上還是乙個迭代器,但是不需要自己像實現迭代器一樣自己去實現__iter__和__next__

方法,因為說過迭代器是一種訪問元素的方式所以需要自己實現,而生成器是乙個屬於generator類,內部已經實現兩個內建方法,也就是說生成器使

用較於迭代器更簡潔與高效。

from collections.abc import iterator

a = [i for i in range(10)]

b = (i for i in range(10))

print(f'列表生成式:')

print(f'生成器:')

print(next(b))

print(next(b))

print(issubclass(type(a), iterator))

print(issubclass(type(b), iterator))

列表生成式:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

生成器:at 0x03555470>01

false

true

生成器就是把演算法儲存在生成器裡面,每呼叫一次,裡面的迴圈才會執行一次然後中斷並返回值,不像的普通的迴圈一樣需要等到迴圈執行完畢才返回。

函式生成器和生成器使用起來也是沒有什麼區別,但是函式生成器需要顯示的使用 yield 關鍵字定義,在關鍵字後面跟需要返回的變數。

def foo():

prev = 0

curr = 1

while true:

curr, prev = prev + curr, curr

yield curr

foo = foo()

print(foo)

while true:

i = next(foo)

if i > 20:

print(i)

break

print(i)

print(next(foo))

print(next(foo))

123

581321

3455

函式生成器內部需要用 yield 進行接收引數,生成器物件使用 generator.send(arg) 進行傳參,呼叫send(x)給生成器傳值時,必須確保生成器已

經執行過一次next()呼叫,這樣會讓程式走到yield位置等待外部第2次呼叫。

generator.send(none)

next(generator)

def foo():

n = yield

for i in range(n):

yield i

foo = foo()

next(foo)

foo.send(10)

print(next(foo))

print(next(foo))

1

2

python第二章學習筆記

from math import print pi print e 3.141592653589793 2.718281828459045 print id 11 print id python print type 12 print type 1.2 140733182862288 2498184...

初學Python 第二章練習題

2 8 迴圈和操作符。建立乙個包含五個固定數值的列表和元組,輸出他們的和。然後修改 為接受使用者的輸入數值。while迴圈 for迴圈 2 9 迴圈和操作符。建立乙個包含五個固定數值的列表和元組,輸出他們的平均值。ps 重點在除法傳統的除法 對整型除法會捨去小數點部分,而地板除法 不管什麼型別的作數...

第二章筆記

1.遞迴查詢和迭代查詢 遞迴查詢是一條環路,直接想成遞迴的定義就行,你想查乙個 的ip,首先將這個 傳給它的本地dns,然後認為本地dns可以直接將ip給你,然後本地dns為了知道這個ip又詢問下個dns伺服器。從此可以看出,增加了被涉及的伺服器的資料,所以一般用迭代查詢,迭代查詢是你詢問完後給你下...