首页 > 编程语言 >Python基础——迭代器 生成器

Python基础——迭代器 生成器

时间:2022-08-26 10:44:33浏览次数:92  
标签:迭代 iterator Python 生成器 next 对象 print

迭代器iterator

  • 迭代简单理解就是重复,但是每次重复产生的结果还要作为下次重复的初始值。
  • 可迭代对象:含有——iter——方法的对象。
  • 可以用for...in..遍历的都是可迭代对象。
  • 字符串 字典 列表 元组等可以被遍历的对象都是可迭代对象。
  • 迭代器:既有iter方法,还有next方法,算是可迭代对象的特例
  • 迭代器是可以记住遍历位置的对象
  • 可迭代对象可以用iter()转换为迭代器
  • 可以使用 isinstance() 判断一个对象是否是 Iterable 对象:
import time
# 3.7 用这句
# from collections import Iterable

# 现在3.10就用这句
from collections.abc import Iterable

a = '12345678'

print('111111111111')
# 下边两句发现字符串是可迭代对象,但是没有next方法说明不是迭代器
print(isinstance(a, Iterable))  # True
# next(a) # TypeError: 'str' object is not an iterator

print('222222222222')
# 可迭代对象可以用for语句遍历
for i in a:
    print(i)

# 将字符串转换为迭代器  两种转换方法
iterator = iter(a)
b = a.__iter__()

print('3333333333333')
print(b)    # <str_iterator object at 0x0000018BA51D1960>
print(b.__next__())
print(next(b))

print(444444444444)
# 前边调用过两次,这里从3开始
for i in b:
    print(i)

print(555555555555)
# 判断迭代器是不是可迭代对象,迭代器可以认为是可迭代对象的特例
print(iterator)     #<str_iterator object at 0x000001CF87127FD0>
print(isinstance(iterator, Iterable))   # True
# print(type(iterator))   # <class 'str_iterator'>

print(666666666666666)
# 迭代器有next方法,所有的都打印了,再使用就会产生异常
print(next(iterator))
time.sleep(0.1)
print(iterator.__next__())
time.sleep(0.1)
print(next(iterator))
time.sleep(0.1)
print(next(iterator))
time.sleep(0.1)
print(next(iterator))

print(77777777777777)
for i in iterator:
    time.sleep(0.1)
    print(i)



生成器generator

  • 生成器可以产生和迭代器差不多功能的一种数据
  • 要创建一个生成器,有很多种方法,第一种方法很简单,只要把一个列表生成式的[]改成()
  • yield关键字
li = [x**2 for x in range(5)]
print(li)

ge = (x**2 for x in range(5))
print(ge)

print(1111111111111111111)
for i in li:
    print(i)

# next(li) # 列表不能用next

print(22222222222222222)
# 生成器可以使用next
print(ge.__next__())

print(33333333333333333333)
# 生成器可以遍历
for i in ge:
    print(i)


#有了yield关键字,我们就有了一种自定义迭代器的实现方式。
# yield可以用于返回值,但不同于return,
# 函数一旦遇到return就结束了,
# 而yield可以保存函数的运行状态挂起函数,用来返回多次值
# 相当于循环里的 break和continue
# 斐波那契数列 1 1 2 3 5 8 13 21
def fib(max):
    n,a,b = 0,0,1
    while n <max:
        yield b
        a,b = b,a+b
        n = n+1

print(44444444444444)
a = fib(6)
print(a)
print(4545454545454545)
print(a.__next__())
print(next(a))
print(555555555555555)
for i in a:
    print(i)

标签:迭代,iterator,Python,生成器,next,对象,print
From: https://www.cnblogs.com/fhy-blog/p/16626781.html

相关文章

  • Python爬虫:抖音个人主页视频抓取
    目标:抓取抖音某博主发布的全部视频用到的模块selenium+requests整体思路:1、先用selenium自动化让数据加载出来到视频获取详情页的链接     2、然后在......
  • Python爬虫 AttributeError: 'NoneType' object has no attribute 'replace'
    在爬虫时执行js代码报错node=execjs.get()ctx=node.compile(js_code).call('webInstace.shell',data)  点击1处进入subprocess.py文件   把encoding=Non......
  • 折腾Nas——①执行Python应用
    ①虚拟机或直接安装Nas②开启SSH,并且安装Python3③登录后台sudo-i输入管理员密码,进入root模式④直接输入pip不可以,需要先安装。首先安装setuptoolswget--no-ch......
  • python内置模块tarfile模块详解:tarfile模块是Python的标准模块之一,能够方便读取tar归
    前言1、通常来说,在工作中我们遇到的最多的压缩文件格式只有5种,如下: xxx.gz 、 xxx.tar 、 xxx.tgz 、 xxx.zip 、 xxx.rar 2、各种压缩文件格式的简介:①gz:......
  • 正确的策略迭代流程是什么?
    当前已经有了一版线上用户正在使用的方案,然后算法对某些策略做了模型迭代或者规则优化(反映在cxr或者更好的用户体验)产生了一版新的方案,新方案的上线流程是怎样的?方式一:新......
  • 学习:python操作数据库
      一次性添加多条数据   ......
  • Python正则表达式常用写法
    一、正则表达式模式模式字符串使用特殊的语法来表示一个正则表达式:下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素......
  • python中常见的几个函数
    functionuselen()用来求元组利润表或者字符串等的长度str()将数据转化成字符串类型......
  • python中的变量
    python中的变量变量命名的时候只能包含字母数字和下划线,并且不能是数字开头变量命名的时候不能和python的关键字冲突python中的数据类字符串......
  • Python——pymysql(连接mysql数据库)
    基本设置(包括预防SQL注入):SQL注入问题,在写入sql语言时,可能会有利用mysql语句来进行正常输入的规避。importpymysqlconn=pymysql.connect(host='127.0.0.1',user......