IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python-day13:迭代器与生成器 -> 正文阅读

[Python知识库]Python-day13:迭代器与生成器

# 2021年12月15日,第四周12~13
# !/usr/bin/env python
# -*- coding: utf-8 -*-
import time
from collections.abc import Iterable
from collections.abc import Iterator


def func1(args=1):
    # 生成器回顾
    for i in range(args):
        i = i * i
        yield i


def day13_case1():
    # 生成器回顾
    list_generator = func1(10)
    print(next(list_generator))  # 运行一次取一个值
    print(next(list_generator))
    print(next(list_generator))
    return 0


def func2(name):
    # 上架包子卖包子
    print("%s有买包子需求了" % (name))
    while True:
        bread = yield
        print("种类%s包子上架1个了,被%s买了1个" % (bread, name))


def day13_case2():
    # 生成器串行操作
    buy1 = func2("张三")  # 生成器0
    buy2 = func2("李四")  # 生成器1
    buy1.__next__()
    buy2.__next__()  # 要运行一次才能传如参数,否则提示生成器未启动
    for i in range(3):
        time.sleep(0.5)
        buy1.send(i + 1)  # 生成器0传入参数
        buy2.send(i + 1)  # 生成器1传入参数
    return 0


def day13_case3():
    # 迭代器:生成器为迭代器,迭代器不一定为生成器
    # 概念:可以直接作用于for循环的数据类型有以下几种:一类是集合数据类型,
    # 如list、tuple、dict、set、str等;
    # 一类是generator,包括生成器和带yield的generator function。
    # 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
    # 生成器不但可以作用于for循环,还可以被next();
    # 函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。
    # 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
    # 可以使用isinstance(对象,类型)判断一个对象是否是Iterable对象:
    print("list是否为可迭代", isinstance([], Iterable))  # list
    print("tuple是否为可迭代", isinstance((), Iterable))  # tuple
    print("dict是否为可迭代", isinstance({}, Iterable))  # dict
    print("str是否为可迭代", isinstance("123", Iterable))  # str
    list_1 = [1, 2, 3, 4, 12, 4, 2, 5, 2]
    list_1 = set(list_1)  # 创建一个集合
    print("list_1的类型为", type(list_1))
    print("集合set是否为可迭代", isinstance(list_1, Iterable))
    generator = (i * 2 for i in range(10))  # 创建生成器
    print("generator的类型为", type(generator))
    print("生成器generator是否为可迭代", isinstance(generator, Iterable))
    print("数字是否为可迭代", isinstance(123, Iterable))
    # 可以使用isinstance(对象,类型)判断一个对象是否是Iterator对象:
    # 生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
    # 把list、dict、str等Iterable变成Iterator可以使用iter()函数
    print("list是否为迭代器", isinstance([], Iterator))  # list
    print("list是否被转为迭代器", isinstance(iter([]), Iterator))  # list
    print("str是否为迭代器", isinstance("abc", Iterator))  # list
    print("str是否被转为迭代器", isinstance(iter("abc"), Iterator))  # list
    # 总结:凡是可作用于for循环的对象都是Iterable(迭代)类型;
    # 凡是可作用于next()函数的对象都是Iterator(迭代器)类型,它们表示一个惰性计算的序列;
    # 集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
    pass


def day13_case4():
    # 迭代器
    for i in [1, 2, 3, 4, 5]:
        print(i)
        pass
    # for循环等价于下面
    object_iter = iter([1, 2, 3, 4, 5])  # 创建可迭代对象
    print(type(object_iter), object_iter) # 类型为list_iterator
    # 循环:
    while True:
        try:
            # 获取下一个值:
            i = next(object_iter)
            print(i)
        except StopIteration:
            # 遇到StopIteration就退出循环
            break


if __name__ == '__main__':
    # day13_case2()
    day13_case3()
    day13_case4()
    pass

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-16 17:37:39  更:2021-12-16 17:38:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:56:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码