迭代器和生成器补充

初步铺垫:

for i in [1,2,3,4]:
pass

l = [1,2,3,4]

l2 = iter(l)
print(l2.__next__())
print(l2.__next__)

print(range(100)) #range(100) 就是一个生成器,为了节省内存,值不会直接输出
print(range(0,100))

#两种range取值方法:

print(list(range(100))) #通过列表
for i in range(100): #通过for循环
    print(i)
print(list(range(1,100,2))) #步长

生成器变形计划:

一级变形:

def a():
    a = 0
    while True:
        # return a
        yield a
        a = a+1

print(a().__next__())
print(a().__next__())  #全是0,每次重新执行那个函数,这个函数就会重新执行

二级变形:

def a():
    a = 0
    while True:
        # return a
        yield a
        a = a+1

l = a()
print(l)
print(l.__next__()) #next可以递归的取值,是因为l始终指得是一个函数
print(l.__next__())
print(l.__next__())

三级变形:

def test2():
    # for i in range(1,6):
    #     yield i #冻结
    yield 1
    yield 2
    yield 3
    yield 4
    yield 5

l=test2()
print(l.__next__())
print(l.__next__())
print(l.__next__())

四级变形:(模拟range功能)

def range2():
    start = 0
    while start<10:
        yield start*4
        start += 1

for i in range2():
    print(i)

五级变形:

def range2():
    start = 0
    l = []
    while start<100:
        l.append(start*4)
        start += 1
    return l
print(range2())

六级变形:

def range3():
    start = 0
    while True:
        yield start*4
        start += 1

# print(range3())
for i in range3():
    print(i)

练习之变形计划

练习一:

"1+1+2+3+5..." #斐波那契数列

#初步:
def test():
    a,b = 1,1
    while a<10:
        c = a + b
        yield c
        a = b
        b = c
print(test())
l = test()
print(l.__next__())
print(l.__next__())
for i in l:
    print(i)

#终极:
def test4():
    a = 1
    yield a
    b = 1
    yield b
    while True:
        c = a+b
        yield c
        a = b
        b = c

l = test4()
print(l.__next__())
print(l.__next__())
print(l.__next__())
print(l.__next__())
print(l.__next__())
# for i in l:
#     print(i)

练习二:

母鸡下蛋例子

def test3():
    i = 0
    while i < 10:
        yield ‘母鸡下了个蛋,这是第%s个蛋‘%(i+1)
        i += 1

l = test3()

print(l.__next__())
print(l.__next__())
print(l.__next__())
for i in l:
    print(i)
时间: 2024-08-05 09:26:59

迭代器和生成器补充的相关文章

第四课 函数补充--装饰器、迭代器、生成器、匿名函数、递归函数

1.装饰器(补充) (在原有的函数前后增加功能,且不改变原函数的调用方式) 1.1.简单的装饰器构成: def timer(func): def inner(*args,**kwargs): '''执行函数之前要做的''' re = func(*args,**kwargs) '''执行函数之后要做的''' return re return inner def outer(flag): def timer(func): def inner(*args,**kwargs): if flag: pri

[python]--迭代器,生成器补充

在python中,list,string,dict都是可迭代对象,可以通过for语句遍历. 迭代器 迭代器对象要求支持迭代器协议的对象,在python中,支持迭代器协议就算实现对象的__iter__()和next()方法.其中__iter__()方法返回迭代器对象本身; next()方法返回容器的下一个元素,在结尾时引发StopIteration异常 __iter__()和next()方法 这两个方法是迭代器最基本的方法,一个用来获得迭代器对象,一个用来获取容器中的下一个元素. 对于可迭代对象,

Python学习之三大名器-装饰器、迭代器、生成器

Python学习之三大名器-装饰器.迭代器.生成器 一.装饰器     装饰,顾名思义就是在原来的基础上进行美化及完善,器这里指函数,所以说装饰器就是装饰函数,也就是在不改变原来函数的代码及调用方式的前提下对原函数进行功能上的完善.其核心原理其实是利用闭包.     格式 @关键字+装饰函数          被装饰函数()      注意:@行必须顶头写而且是在被装饰函数的正上方     按照形式可以分为:无参装饰器和有参装饰器,有参装饰器即给装饰器加上参数     以下示例是一个无参装饰器,

Python 从零学起(纯基础) 笔记 之 迭代器、生成器和修饰器

Python的迭代器. 生成器和修饰器 1. 迭代器是访问集合元素的一种方式,从第一个到最后,只许前进不许后退. 优点:不要求事先准备好整个迭代过程中的所有元素,仅仅在迭代到某个元素时才计算该元素,而在这之前或者之后,元素可以不存在或被销毁. 特点: 访问者是不需要关心迭代器内部的结构,仅需要通过next()方法不断去取下一个内容. 不能随机访问集合中的某个值,只能从头到尾依次访问. 访问到一半时不能往回退 便于循环比较大的数据集合,节省内存 1 names = iter(['alex','ja

迭代器和生成器入门

Python 迭代器生成器 迭代器.生成器这些概念名称真是让人头大,其实它们的原理特别简单.深刻. 可迭代对象(iterable) 在讲迭代器和生成器之前,必须要讲的一个概念就是可迭代对象. 可迭代对象之前需要聊一下Python中的那些内置数据结构--列表.字典.集合.元组等,这些数据结构就像一个装有内置数据的容器. 这里可以这么想--把数据想象成苹果,把列表.字典.集合.元组等想像成装苹果的袋子.盒子.篮子.筐子等装苹果的容器. 我们都能从这些容器中一个一个把所有苹果拿出来,这就像是我们经常使

Python 函数式编程之迭代器、生成器及其应用

python 标准库中提供了 itertools, functools, operator三个库支持函数式编程,对高阶函数的支持,python 提供 decorator 语法糖. 迭代器 (iterator)和生成器(generator)概念是 python 函数式编程的基础,利用迭代器和生成器可以实现函数式编程中经常用到的 map(), filter(), reduce() 等过程以及 itertools, functools 中提供的绝大部分功能. 1.迭代器和生成器基础(next, ite

重修课程day12(函数之迭代器和生成器)

一  迭代器 集合的目的:去重,关系运算. # a={1,2,3,4,5,6,7} # b={41,52,5,26,7,4,2,9,} # print(a-b) isinstance:判断数据的类型,还可以判断是否可迭代. iterable:形容词  可迭代的:from collections import Iterable:用来检测一个对象是否可以迭代. # from collections import Iterable # print(isinstance('fadda',Iterable

python基础----迭代器、生成器、协程函数

一.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法) 3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象. 二,为什么要用迭代器 优点: 1:迭代器提供了一种不依赖于索引的取值方式,

15.python的for循环与迭代器、生成器

在前面学习讲完while循环之后,现在终于要将for循环这个坑填上了.之所以拖到现在是因为for循环对前面讲过的序列.字典.集合都是有效的,讲完前面的内容再来讲for循环会更加容易上手. 首先,for循环和while循环一样,都是在满足一定条件的时候对其内层的代码进行循环执行.不同的是,while循环判断的是条件,而for判断的是迭代对象. 我们先来看for循环的代码: a = (1, 2, 3, 4, 5) for x in a: print x 我们以序列中的元祖为例,发现其输出了这些,那么