重修课程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))

  dir:打印一种数据类型的方法 

print(dir(‘asdasf‘))

 什么叫做可迭代对象:操作的对象下面有__iter__()方法的就是可迭代对象。

 什么叫做迭代器:操作的对象下面不光有__iter__()方法的,还有__next__()方法的就是迭代器,迭代器是不用关心值得索引状态的

  iterator:迭代器:实现了能从其中一个一个的 取值出来。

lst_iterator=[1,2,3,4,5].__iter__()
print(lst_iterator.__next__())

 一切可以用for循环的基本数据类型都是可迭代对象,而不是迭代器。for循环的可以是一个可迭代对象,也可以是一个迭代器。而for循环自动为可迭代对象调用__iter__()方法。

for i in [1,2,3,4,5,6]:
    print(i)

  文件本质就是一个迭代器。range()就是一个可迭代对象,可迭代对象有:字符串,列表,元组等等。

__iter__():将一个可迭代对象转化成一个迭代器

__next__():读取迭代器的内容,一次只能读取一行或者一个内容

# with open(‘a.txt‘,encoding=‘utf-8‘)as f:
#     print(f.__next__())
#     print(f.__next__())
#     print(f.__next__())
#     print(f.__next__())
#     print(f.__next__())
#
# b=[41,52,5,26,7,4,2,9,]
# bb=b.__iter__()
# print(bb.__next__())
# print(bb.__next__())
# print(bb.__next__())
# print(bb.__next__())
# print(bb.__next__())

 迭代器取到没有值的时候就会报错。报的是StopIteration。

 迭代器的好处:1 能够对python中的基本数据类型进行统一的遍历,不需要关系每一个值是什么。

        2 惰性预算:可以节省内存。

# for i in range(1,1000):
#     print(i)
#     if i == 100:
#         break

迭代器的创建:1 天生就是一个迭代器,比如说:文件句柄

       2 后天转换成迭代器:迭代器=可迭代对象.__iter__()

二 生成器

 什么是生成器(Gerator):生成器本质就是一个迭代器,生成器就是自己写出来的迭代器。

 什么是生成器函数:函数里有yiled的关键字就是一个生成器函数。

# def iter_1():
#     print(111)
#     yield 222
#     print(333)
#     yield 444
#
# iter_2=iter_1()
# print(iter_2.__next__())
# print(iter_2.__next__())

  yiled:意思和return差不多,但是yiled可以定位当前取值的位置,就是在next取值过后,就定位到取到的那个值的位置,等再次使用next取值的时候,就从第一次取值过后定位的那个位置开始取值,一个next对应一个yiled。

   from:yiled下的一个方法,可以简化生成器函数。用了from,就可以不用for循环。

# def foo():
#     for i in [1,2,3,4,5,6,7]:
#         yield i
# for i in foo():
#     print(i)

# def foo():
#     yield from [1,2,3,4,5,6,7]
# for i in foo():
#     print(i)

 生成器函数在调用的时候返回来的就是一个生成器,不会执行生成器函数里面的内容。

# def iter_1():
#     print(111)
#     yield 222
#     print(333)
#     yield 444
#
# iter_2=iter_1()
# print(iter_2)

 而生成器和迭代器运行的顺序是只能往前取值,而不能够回头。

  生成器的用法:1 有几个next,就取几个yiled的返回值,不能超过yiled的范围。

         2 直接for循环取值:for 变量名 in 生成器名。

         3 其他数据类型进行强转,list(数据类型对象)返回一个列表,里面装着生成器的所有内容。

for i in range(1,10):
    print(i)
print(list(range(10,20)))

  注意:1 生成器函数取值必须先转换成生成器,在进行next取值。

     2 生成器的内容只能取一次,不能重复,只能向前取值;不能后退,直到取完为止。

三 文件补充小知识

文件下seek()传的值:0:光标的相对位置;1:当前光标的位置;2:将光标一道最后一个一个位置。

# def aa(bb,dd):
#     with open(bb,‘w‘,encoding=‘utf-8‘)as f :
#         f.write(dd)
# aa(‘a.txt‘,‘afdfd\nfadsa‘)
# def tail(cc):
#     f=open(cc,encoding=‘utf-8‘)
#     f.seek(0,2)
#     while True:
#         line=f.readline()
#         if not line:
#             continue
#         yield line
# tail_g=tail(‘a.txt‘)
# for line in tail_g:
#     print(line,end=‘‘)
#
时间: 2024-10-22 13:04:16

重修课程day12(函数之迭代器和生成器)的相关文章

python函数:迭代器和生成器

python函数:迭代器和生成器 迭代器和生成器是函数中的一大重点,务必掌握,何为迭代?何为迭代器? 预习: 处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕(使用生成器) 一.迭代器 for i in 50:     print(i) #运行结果: # Traceback (most recent call last): #   File "G:/python/python代码/八月/day2 迭代器生成器/3迭代器.py", line 8, in &

函数4—迭代器与生成器

基础概念迭代器: 为什么: 提供了一种不依赖于索引的取值方式,如字典,集合,文件等没有索引的类型需要循环取出元素 迭代器是惰性计算,更节省内存,迭代器在内存中只是一个内存地址,一次只取一个值 缺点:永远无法获取迭代器的长度,使用不如列表索引取值灵活 一次性的,只能往后取值 可迭代的:对象本身有__iter__方法 i = iter(n) or i = n.__iter__() i 为n的迭代器 next(i) or i.__next__() 利用迭代器输出内容,一次输出一个 生成器: 定义: 函

Learn Python—函数(迭代器、生成器)

迭代器iterator 可迭代协议-只要含有__iter__方法的,都是可迭代的iterable 迭代器协议-内部含有__next__方法和__iter__方法的就是迭代器 只要能被for循环的数据类型,就一定拥有__iter__方法,for循环其实就是在使用迭代器 只要是迭代器就一定可以迭代 可迭代对象.__iter__() == 迭代器 迭代器中的__next__()方法可以一个一个的获取值 迭代器对象可以使用常规for语句进行遍历: list=[1,2,3,4] it = iter(lis

函数四--迭代器和生成器

一.迭代器 迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个StopIteration异常,以终止迭代(只能往后走,不能往前走). 实现了迭代器协议的对象(对象内部定义了一个__iter__()方法) python中的内部工具(如for循环,sum,min,max函数等)都是基于迭代器协议访问对象 只要含有__iter__方法的都是可迭代的-----可迭代协议:迭代器协议:内部含有__next__和__iter__方法的就是迭代器 只要是迭代器就一定可迭代

Python基础——函数的迭代器和生成器

等待更新…………………… 后面再写 原文地址:https://www.cnblogs.com/mashangsir/p/11330235.html

day5--装饰器函数的信息打印,迭代器,生成器,列表推导式,内置函数

本文档主要内容: 一 装饰器函数的信息打印 二 迭代器 三 生成器 四 生成器表达式和列表推导式 五 内置函数 一 装饰器函数的信息打印 一个函数一旦被装饰器给装饰后,这个函数的信息使用原来的命令打印的就是装饰器函数的信息了,如何做呢? from functools import wraps def logger(f): @wraps(f) def inner(*args, **kwargs): """ :param args: 函数名,密码 :param kwargs: 备

python函数、装饰器、迭代器、生成器

5月21日,请假结婚,然后性格惰性来了,不怎么想看视频和笔记,性格中的弱点开始出现,开始做的不错,渐渐开始松懈,直至放弃--- 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之迭代器 函数之生成器 内置函数 一.函数补充进阶 1.函数对象:  函数是第一类对象,即函数可以当作数据传递,它的应用形式也被称为高阶函数,函数的特性如下: a. 可以被引用 1 # def foo(): 2 # print('from foo') 3 # 4 # func = foo

迭代器和生成器函数

引入: l = [1,2,3,4,5] s = {1,2,3,4} for i in l: print(i) 如果代码是: for i in 50: print(i) 这个运行不了.输出结果是 'int' object is not iterable iterable是可迭代的意思. 哪些可以迭代呢?这些可以str.list.tuple.set.dic等 可迭代的标志是  _iter_. 那我们如何判断是否可以迭代呢? print('__iter__' in dir([1,2,3])) 双下划线

python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,next 方法 内置函数iter(),next()  本质上都是用的对象.__iter__(),__next__()的方法 内置函数 iter(iterable),表示把可迭代对象 变成迭代器(iterator) 内置函数next(iterator) ,表示查看下一次迭代的值(当然也可以用 iterato