迭代器與生成器

2022-09-07 18:09:16 字數 1869 閱讀 9177

#coding=utf-8

"""1、列表生成式

"""list1 = [i for i in range(10)]

print list1

"""生成器 generator 只有在呼叫的時候才會生成相應的數值、只記錄當前位置,

只有乙個__next__方法.python2.7裡面是next()一般不用此方法,會使用for迴圈來遍歷生成器

"""list1 = (i for i in range(10))

print list1##

# a= 1

# b=2

# a,b = b,a+b

# #相當於

# t = (b,a+b)

# a = t[0]

# b = t[1]

#生成器函式例項

def fib(value):

i,j,z = 0,0,1

while i < value:

yield z

j,z = z, j+z

i +=1

# return "end" python2中不支援return

# fiber = fib(10)

# fiber.next()

# fiber.next()

# fiber.next()

#生成器並行的例項

import time

def consumer(name):

print ("%s 準備"%name)

while true:

i = yield

print ("%s is coming %s please ready"%(i,name))

a = consumer("liming")

a.next()

a.next()

def product():

people1 = consumer("xiaoming")

people2 = consumer("xiaohua")

people1.next()

people2.next()

print ("接下來我準備發球了")

for i in range(10):

time.sleep(3)

print ("發球了")

people1.send("第"+str(i)+"顆球")

people2.send("第"+str(i)+"顆球")

#product()

#可迭代的資料型別 列表 、元組、字典、集合、字串 還有生成器,

#可迭代物件又稱iterable 可以使用isinstance判斷乙個物件是否是某個物件

#可以使用for迴圈遍歷的物件稱為可迭代物件,

#可以被next()函式呼叫,並不斷返回下乙個值的物件稱為迭代器 iterator

from collections import iterable,iterator

print isinstance(,iterable) #判斷迭代物件

isinstance(,iterator) #判斷迭代器

print isinstance([i for i in range(10)],iterator)

print isinstance((i for i in range(10)),iterator) #注意兩個的區別

#把可迭代物件變成迭代器,之後就可以使用next()函式了

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

print "iter()函式",isinstance(i,iterator)

list = [i for i in range(100) if i/2!=0]

print list

迭代器與生成器

可迭代物件 可以直接作用於for迴圈的物件 統稱為可迭代物件 返回迭代器的物件 即iterable。一是集合資料型別,如list tuple dict set str等 二是generator,包括生成器和帶yield的generator function。容器 簡單來說 容器是一系列元素的集合 容...

生成器與迭代器

迭代是python最強大的功能之一,是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。迭代器有兩個基本的方法 iter 和 next 字串,列表或元組物件都可用於建立迭代器 list 1,2,3,...

生成器與迭代器

通過列表推導式,可以直接建立乙個列表,但是收到記憶體限制,列表容量肯定是有限的而且,建立乙個包含100萬個元素的列表,占用很大的儲存空間。如果我們僅僅需要訪問前面幾個元素,後面 後面元素的占用儲存空間就被浪費 所以,如果列表元素可以按照某種演算法算出來,那我們就可以再迴圈當中不斷地推導它,生成元素,...