Python生成器與迭代器

2021-08-11 20:28:27 字數 1454 閱讀 1200

生成器只有在用的時候會出現在記憶體中,對比列表全部存在記憶體中,減少了記憶體占用

next()函式 依次取生成器的值

s = (x*2 for x in range(1000))      # 中括號是列表解析,小括號表示生成一系列值,就是生成器

# s: at 0x7fa20aa8b048>

print(next(s)) # 用next()函式取生成的值

print(next(s)) # 取出這個值後會記錄這個位置,下次從後面依次取值

# 生成器就是乙個可迭代的物件

yield方法 建立生成器物件

def foo():

# print('ok1') # 不使用next方法,函式內部不會執行

yield 1 # 使用next方法後,才會執行yield前面的**並返回值,函式停在該位置

# print('ok2')

yield 2 #

for i in foo(): # for迴圈就是封裝的迭代器取值方法

print(i)

p = foo()

next(p) # 取生成的值

print(next(p))

def fibo(m):

a,b,c=0,0,1

while a

send()函式 給yield前邊的變數賦值

def foo():

print('ok1')

kk = yield 1 # 程式走到這裡會返回該迭代器物件,並不會直接賦值

print(kk)

yield 2

n = foo()

n.send(none) # 首先傳乙個空值進去,讓函式記住迭代器物件的位置

# next(n) # 也可以讓next()函式走到第乙個迭代器物件的位置,效果同上

n.send('eee') # 然後在這裡傳乙個值給記住的代器物件位置前面的變數

# list, tuple, dict, string : iterable(可迭代物件)

l = [1,2,3,4,5]

d = iter(l) # iter()函式生成乙個迭代器

print(d) # print(l.__iter__()) # 效果同上

# 滿足兩個條件: 1.有iter方法 2.有next方法 就是乙個迭代器

from collections import iterable,iterator

print(isinstance(d, iterator)) # 判斷是否為迭代器 true

python 迭代器與生成器

迭代器和生成器 print 1 in 1,2,3 print 1 not in 1,2,3 print 4 in print 4 not in 1,2,3 print x not in dlkjfxfei 可迭代物件 iterable 可以被next 函式呼叫並不斷返回下乙個值 知道沒有資料時丟擲s...

Python 迭代器與生成器

一 迭代器 理解迭代器需要搞清楚容器 container 迭代器協議 可迭代物件 iterable 迭代器 iterator 生成器 generator 1 容器 container 容器是一種把多個元素組織在一起的資料結構,容器中的元素可以逐個地迭代獲取,可以用in,not in關鍵字判斷元素是否...

python 迭代器與生成器

迭代就像是遍歷,迭代只能乙個個往下獲取,不能往上獲取,需使用iter函式。name是乙個包含元素cc,dd,ee的迭代器 name iter cc dd ee 訪問迭代器中的元素需使用next方法 print name.next cc print name.next dd print name.ne...