Python记录12:迭代器+生成器+生成式

‘‘‘1. 什么是迭代器    什么是迭代:迭代就是一个重复的过程,但是每一次重复都是基于上一次的结果而进行的        单纯的重复不是迭代:            while True:                print(1)

迭代的过程            l=[‘a‘,‘b‘,‘c‘]            i=0            while i < len(l):                print(l[i])                i+=1

迭代器:迭代取值的工具

2. 为何要用迭代器    迭代器的优点:        1. 提供了一种可以不依赖索引的迭代取值方式

3. 如何用迭代器‘‘‘# 可迭代的对象:但凡内置有__iter__方法的对象就是可迭代的对象,例如:str\list\tuple\dict\set\文件对象# ‘‘.__iter__()# [].__iter__()# (1,2).__iter__()# {‘x‘:1}.__iter__()# {1,2,3}.__iter__()# open(‘今日内容‘).__iter__()

# 调用可迭代对象的__iter__()方法,会得到一个返回值,该返回值就是迭代器对象

# 迭代器对象: 既内置有__iter__方法又内置有__next__方法,例如文件对象

# dic={‘x‘:1,‘y‘:2,‘z‘:3}# print(len(dic)) #dic.__len__()

# iter_dic=dic.__iter__()# # print(iter_dic)# print(iter_dic.__next__())# print(iter_dic.__next__())# print(iter_dic.__next__())# # print(iter_dic.__next__())## new_iter_dic=dic.__iter__()# print(new_iter_dic.__next__())# print(new_iter_dic.__next__())# print(new_iter_dic.__next__())

# iter_dic=iter(dic) #dic.__iter__()# next(iter_dic) #iter_dic.__next__()

# 迭代器总结:# 优点:# 1. 提供了一种不依赖索引的迭代器取值方式# 2. 节省内存# 缺点:# 1. 一次性,只能往后一直取,无法预测迭代中包含的值的个数# 2. 无法取到指定的值,不如按照索引或者key的取值方式灵活

dic={‘x‘:1,‘y‘:2,‘z‘:3}# iter_dic=iter(dic)## while True:#     try:#         print(next(iter_dic))#     except StopIteration:#         break# print(‘=‘*100)# # iter_dic=iter(dic)# while True:#     try:#         print(next(iter_dic))#     except StopIteration:#         break

# for k in dic:#     print(k)

# for循环的底层工作原理:#1. 调用in后面那对象的内置方法__iter__,拿到一个迭代器对象iter_obj#2. 执行k=next(iter_obj),循环往复直到抛出异常StopIterration#3. for循环会捕捉异常然后结束循环

dic={‘x‘:1,‘y‘:2,‘z‘:3}iter_dic=iter(dic)print(iter_dic.__iter__().__iter__().__iter__() is iter_dic)

# with open(r‘D:\周末三期\day06\01 叠加多个装饰器.py‘,‘r‘,encoding=‘utf-8‘) as f:#     for line in f:#         print(line)
‘‘‘1. 什么是生成器    生成器就是一种自定义的迭代器

3. 如何使用生成器:    在函数内但凡出现yield关键字,然后调用函数不会立即执行函数体代码,会得到一个返回值,该返回值称之为生成器,即我们自定义的迭代器‘‘‘

# def func():#     print(‘first‘)#     yield 1#     print(‘second‘)#     yield 2#     print(‘third‘)#     yield 3#     print(‘fourth‘)## g=func()# # print(g)# # g是生成器对象,而生成器对象本质就是迭代器# res1=next(g)# print(res1)## res2=next(g)# print(res2)## res3=next(g)# print(res3)## next(g)

# def my_range(start,stop,step=1): #start=1 stop=7 step=2#     while start < stop: # 7 < 7#         yield start ##         start+=step # start=7### res=my_range(1,70000000000000000000000000000000000000000000000000000000,2)# for item in res:#     print(item)

# print(next(res))# print(next(res))# print(next(res))# print(next(res))

# print(res)

#总结yield:#1. 提供一种自定义迭代器的解决方案#2. yield vs return:#   相同点:都能返回值,并且返回值没有类型与个数限制#   不同点:yield可以返回值多次值,而return只能返回一次值
 
# 列表生成式# res=[]# for item in range(1,11):#     if item > 5:#         res.append(item)# print(res)

# res=[item for item in range(1,11) if item > 5]# print(res)

# names=[‘alex_sb‘,‘egon‘,‘kevin_sb‘,‘hxx_sb‘,‘wxx_sb‘]# res=[name for name in names if name.endswith(‘sb‘)]# print(res)

# 字典生成式# res={i:i**2 for i in range(10) if i > 5}# print(res)

# l=[(‘name‘,‘egon‘),(‘age‘,18),(‘gender‘,‘male‘)]# dic={k:v for k,v in l if k!=‘age‘}# print(dic)

# res={i for i in range(10)}# print(res,type(res))

# 生成器表达式res = (x for x in range(1, 5))# print(res)# print(next(res))# print(next(res))# print(next(res))# print(next(res))# print(next(res))

with open(‘aaa.txt‘,encoding=‘utf-8‘) as f:    # g=(len(line) for line in f)    # print(max(g))

res=max(len(line) for line in f)    print(res)


原文地址:https://www.cnblogs.com/1832921tongjieducn/p/10070597.html

时间: 2024-10-27 17:19:51

Python记录12:迭代器+生成器+生成式的相关文章

从零开始的Python学习Episode 12——迭代器&amp;生成器

生成器 列表生成式 用于快速地生成一个列表 a = [x*x for x in range(1,9)] print(a) #输出[1, 4, 9, 16, 25, 36, 49, 64] 也可以用于生成函数结果的列表 def f(n): return n**3 a = [f(x) for x in range(1,9)] print(a) #输出[1, 8, 27, 64, 125, 216, 343, 512] 迭代器 迭代器是一个带状态的对象,他能在你调用 next() 方法的时候返回容器中

python第四周迭代器生成器序列化

第一节装饰器复习和知识储备------------ 第一节装饰器复习和知识储备------------ def wrapper(*args,**kwargs): index(*args,**kwargs) # * 的作用是把位置参数打散传值到args=[a,b,c] # **的作用是把关键字参数打散传值到kwargs=[a,b,c] def index(a,b,c): print(a,b,c) wrapper('tt','pppp',c='vvv') 二:函数可以被当做数据传递. 函数可以当做参

python基础学习-迭代器+生成器(补充)

一:装饰器.生成器(补充了解***) 1.叠加多个装饰器的加载.运行分析(了解***) def deco1(func1): #func1 = wrapper2的内存地址 def wrapper(*args,**kwargs): print('正在运行======>deco1.wrapper1') res1 = func1(*args,**kwargs) # func1是wrapper2 return res1 return wrapper ? def deco2(func2): #func2 =

Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化

本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 先定义一个基本的装饰器: ########## 基本装饰器 ########## def orter(func):    #定义装饰器     de

python之路系列-生成器和迭代器-景丽洋老师

返回顶部 楔子 假如我现在有一个列表l=['a','b','c','d','e'],我想取列表中的内容,有几种方式? 首先,我可以通过索引取值l[0],其次我们是不是还可以用for循环来取值呀? 你有没有仔细思考过,用索引取值和for循环取值是有着微妙区别的. 如果用索引取值,你可以取到任意位置的值,前提是你要知道这个值在什么位置. 如果用for循环来取值,我们把每一个值都取到,不需要关心每一个值的位置,因为只能顺序的取值,并不能跳过任何一个直接去取其他位置的值. 但你有没有想过,我们为什么可以

python基础之迭代器协议和生成器

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

Python装饰器、迭代器&amp;生成器、re正则表达式、字符串格式化

Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 先定义一个基本的装饰器: ########## 基本装饰器 ########

Python之路——迭代器与生成器

一.迭代器 1 # -*- encoding:utf-8 -*- 2 3 4 # dir([1,2].__iter__())是列表迭代器中实现的所有方法,dir([1,2])是列表中实现的所有方法 5 # print(dir([1,2].__iter__())) 6 # print(dir([1,2])) 7 # print(set(dir([1,2].__iter__()))-set(dir([1,2]))) # {'__length_hint__', '__setstate__', '__n

python之迭代器生成器和内置函数,匿名函数

今天学习了迭代器生成器以及内置函数和匿名函数,说实话有些懵圈,有些难度了. 一.迭代器和生成器 1.如何从列表.字典中取值的: index索引 for循环 凡是可以使用for循环取值的都是可迭代的 (1)可迭代协议:内部含有__iter__方法的都是可迭代的 (2)迭代器协议:内部含有__iter__方法和__next__方法的都是迭代器 什么是可迭代的:内部含有__iter__方法的都是可迭代的 什么是迭代器:迭代器=iter(可迭代的),自带一个__next__方法 可迭代最大的优势:节省内