生成器只有在用的時候會出現在記憶體中,對比列表全部存在記憶體中,減少了記憶體占用
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...