python 生成器和迭代器

2022-08-28 21:45:18 字數 1967 閱讀 1511

__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 迭代器和生成器

迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...