__author__ = '12711'#-*- coding:utf-8 -*-
'''g=(i*2 for i in range(10))
print(g)
print(next(g))
next(g)
print( g.__next__())
# g.__next__()
# for i in g:
# print(i)
''''''
#1,1,2,3,5,8
def fib(s):
n,a,b=0,0,1
while n
#print(b)
yield b
a,b=b,a+b
n+=1
return 'ha'
f=fib(6)
print(f)
# print(f.__next__())
# print(f.__next__())
# print("幹點好事")
# print(f.__next__())
for i in fib(6):
print(i)
#這裡,最難理解的就是generator和函式的執行流程不一樣。
# 函式是順序執行,遇到return語句或者最後一行函式語句就返回。
# 而變成generator的函式,
# 在每次呼叫next()的時候執行
# ,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行。
''''''
import time
def consumer(name):
print("%s 準備吃包子啦!" %name)
while true:
baozi = yield
print("包子[%s]來了,被[%s]吃了!" %(baozi,name))
def producer(name):
c = consumer(name)
#c2 = consumer(name)
c.__next__()
#c2.__next__()
print("老子開始準備做包子啦!")
for i in range(10):
time.sleep(1)
print("做了1個包子!")
c.send(1)
#c2.send(i)
producer("alex")
''''''
迭代器我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種:
一類是集合資料型別,如list、tuple、dict、set、str等;
一類是generator,包括生成器和帶yield的generator function。
這些可以直接作用於for迴圈的物件統稱為可迭代物件:iterable。
可以使用isinstance()判斷乙個物件是否是iterable物件:
'''from collections import iterable
print(isinstance(,iterable))
print(isinstance((i*2 for i in range(10)),iterable))
#可以使用isinstance()判斷乙個物件是否是iterator物件:
from collections import iterator
print(isinstance((i*2 for i in range(10)),iterator))
print(isinstance(,iterator))
# 生成器都是iterator物件,但list、dict、str雖然是iterable,卻不是iterator。
## 把list、dict、str等iterable變成iterator可以使用iter()函式:
print(isinstance(iter(),iterator))
Python迭代器和生成器
先說迭代器,對於string list dict tuple等這類容器物件,使用for迴圈遍歷是很方便的。在後台for語句對容器物件呼叫iter 函式,iter 是python的內建函式。iter 會返回乙個定義了next 方法的迭代器物件,它在容器中逐個訪問容器內元素,next 也是python的...
Python迭代器和生成器
迭代器是訪問集合元素的一種方法 是可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問 他有兩個基本的方法,iter 和next 字串,列表或遠足物件都可以用於建立迭代器 list1 1,2,3,4 it1 iter list1 建立迭代器物件 print next ...
python 迭代器和生成器
迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...