• 重制版 day 13 迭代器和模块


    day 13 迭代器和模块

    迭代器

    迭代器是容器型数据类型

    无法查看一个迭代器中的所有元素,也无法通过len获取元素个数

    如果想要使用迭代器中元素,必须将元素从迭代器中取出,从上往下按顺序取出,取出的数据无法放回迭代器

    创建迭代器

    1)用iter将其他序列转换成迭代器

    2)创建生成器

    i1=iter('123')
    print(i1)
    i2=iter([1,2,3,4,5])
    print(i2)
    
    • 1
    • 2
    • 3
    • 4

    迭代器的查操作

    被获取到的元素一定会从迭代器中消失

    1)获取单个元素:next(迭代器)

    当迭代器中的元素都被取出之后,再进行取出,报错

    2)遍历

    for i in 迭代器:
        print(f'i:{i}')
    
    • 1
    • 2

    3)迭代器转换成序列

    i3=iter('hello')
    result=list(i3)
    print(result) # ['h', 'e', 'l', 'l', 'o']
    
    • 1
    • 2
    • 3

    生成器

    生成器是容器型数据类型(具备创建多个数据的能力,而不是保存数据的能力)

    打印生成器无法查看所有元素,不支持len操作查看元素个数

    生成器获取数据的方式和迭代器一样:next(),遍历

    创建生成器

    生成器保存的是产生数据的算法

    调用带有yield关键字的函数,就可以得到一个生成器

    生成器创建数据的个数和数据的值与执行函数体中遇到的yield的次数和yield后面的值有关

    def func2():
        yield 100
        yield 200
        yield 300
    gen2=func2()  # 3个yield,生成器的数据分布是100,200,300
    print(next(gen2))  # 100
    print(next(gen2))  # 200
    print(next(gen2))  # 300
    
    def func3(subject):
        for i in range(1,100):
            yield f'{subject}{i:0>3}'  # 出现99次yield yield后面的值为生成器的元素
    gen3=func3('python')
    for i in gen3:
        print(f'i:{i}')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    生成器产生数据的原理

    调用函数创建生成器的时候不会立刻执行函数体,获取生成器中的元素才会执行函数体

    每次再执行函数体的时候从开始位置开始,执行到yield就停止,并将yield后面的数据作为获取到的元素,获取下一次生成器的元素,从yield后面开始

    模块

    模块:python中的一个py文件就是一个模块

    被使用的模块的模块名(py文件的文件名)必须符合变量名的要求

    使用钱必须先导入,被导入的模块使用的内容只能是模块中的全局变量

    导入模块的方法

    import 模块名-导入指定模块,通过模块名.变量名的方式使用模块中的全局变量

    from 模块名 import 变量1,变量2,...–导入指定模块中的指定变量,导入后直接使用指定变量

    from 模块名 import * --导入指定模块中的所有变量,导入后直接使用变量

    拓展:* 号在导入模块的时候,默认为所有模块

    import 模块名 as 新模块名–导入模块的时候对模块进行重命名操作,导入后使用新模块名.变量名进行使用变量

    from 模块名 import 变量1 as 新变量名1,变量2 as 新变量名2–导入模块的时候对变量进行重命名操作,导入后之间使用新的变量名进行使用

    重命名操作用as

    导入模块的原理:

    导入模块的时候,系统会全部执行导入模块中的全部内容

    存在的问题:可以会在导入模块的时候,执行一些没有必要执行的操作

    导入模块的时候选择性执行代码:

    在被导入的模块中加入一个if语句

    if __name__=='__main__',将不需要执行的其他内容放里面

    包就是包含__init__.py文件的文件夹,包可以看作一个文件夹,模块放在文件夹中,其中有一个模块叫做__init__.py的模块

    作用:管理py文件,对py文件按照特定的方式进行分类

    使用包中的内容

    import 包名–必须是包的名字, 文件夹无意义.导入后使用包名.模块名使用__init__.py模块中的变量

    import 包名.模块名–直接导入包中的模块.使用包名.模块名.变量名使用,可以进行重命名操作

    from 包名 import 模块名1,模块名2,...-直接导入包中的模块名,直接使用模块名.变量名

    from 包名.模块名 import 变量1,变量2,...直接导入包中的模块中的变量,直接使用变量名

    包中还有包,包名用.隔开

    异常捕获

    异常就是错误,如果出现异常,会中断程序的执行(让程序提前结束,非正常结束)

    exit() -退出,正常结束

    异常捕获-当程序出现异常的时候,不会崩溃,不会闪退,还可以接着往后执行

    结构1-捕获所有异常

    try:

    ​ 代码段1(需要捕获异常的代码段)

    except:

    ​ 代码段2(捕获到异常之后需要执行的代码段)

    结构2-捕获指定类型的异常,只有捕获的指定的异常类型才会执行立刻马上执行代码段2, 其他类型错误会正常报错

    try:

    ​ 代码段1

    except 异常类型:

    ​ 代码段2

    结构3–同时捕获多种异常

    try:

    ​ 代码段1

    except(异常类型1,异常类型2,…):

    ​ 代码段2

    结构4-捕获到异常后的操作不一样

    try:

    ​ 代码段1

    except 异常类型1:

    ​ 代码段11

    except 异常类型2:

    ​ 代码段22

    try:
        print('abc'[1])
        print('abc'[4]) # 出现异常,后面的代码不执行,立刻跳转except代码
        print('abc'[2])
    except:
        print('捕获异常')
    print('程序结束')
    '''
    运行结果:
    b
    捕获异常
    程序结束
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    try:
        age=int(input('请输入年龄:'))
        if age>=18:   # 判断条件写在try 里面, 输入正确才会执行判断
            print('成年')
        else:
            print('未成年')
    except:
        print('年龄输入错误!')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    springCloudAlibaba之分布式网关组件---gateway
    关于IPC和PTH用户权限问题,psexec拒绝访问(Access Denied)的原因
    体验 ABP 的功能和服务
    146616-66-2,胺反应性染料BDP FL NHS Ester,聚乙二醇单烯丙基醚
    用js理解常用设计模式
    在AWS上部署一个网站
    心电贴技术方案芯片LH001-91
    推荐系统 | 基础推荐模型 | 特征交叉 | FM | FFM | PyTorch实现
    Linux - 还不懂 gdb 调试器?(调试软件)
    leetcode-233:数字 1 的个数
  • 原文地址:https://blog.csdn.net/Feifei_peng/article/details/126147487