day13 学习总结:

day13 学习总结:

1. 迭代器
  • 迭代器(iter)

    • 迭代器是容器型数据类型(可以转换成列表)
    • 打印一个迭代器无法查看这个迭代器中的所有元素,迭代器也无法通过len()获取元素个数
    • 如果想要使用迭代器中的元素,必须将元素从迭代器中取出,而且在取的时候只能从上往下按顺序取,一取个少一个,取出来的数据无法再放回迭代器
  • 创建迭代器方法:

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

      # 用iter将其他序列转换成迭代器
      iter1 = iter("abcd")
      print(iter1)
      # 输出结果:<str_iterator object at 0x000002243F4F54F0>
      iter2 = iter([10,15,20,30])
      print(iter2)
      # 输出结果:<list_iterator object at 0x000002243F4D6730>
      # print(len(iter2)) 报错,迭代器无法通过len()获取元素个数
      
    • 创建生成器

  • 查操作

    • 注意:不管以什么样的方式获取到了迭代器中元素,那获取到的元素一定会从迭代器消失。

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

    • 遍历

      iter1 = iter("abcd")
      iter2 = iter([10,15,20,30])
      print(next(iter2))  # 10
      print(next(iter2))  # 15
      print(list(iter2))  # [20,30]
      
      for i in iter1:
          print(f"x:{i}") 
      # x:a
      # x:b
      # x:c
      # x:d	
      i3 = iter("hello")
      result = list(i3) 
      print(result) # ['h', 'e', 'l', 'l', 'o']
      # print(next(i3)) # 报错, 此时i3的数据都被遍历了一遍,没有数据了
      
2. 生成器
  • 生成器:

    • 是容器型数据类型(具备创建多个数据的能力,而不是保存多个数据的能力)
    • 打印生成器无法查看所有的元素,生成器也不支持len()操作。
    • 如果需要使用生成器中的元素,必须将数据提取出来,而且取一个少一个
    • 生成器获取数据的方式和迭代器一样。
  • 创建生成器:

    • 生成器保存的并不是数据本身,而是产生数据的算法。
    • 怎么创建生成器:调用带有yield关键字的函数,就可以得到一个生成器。
    • 如果被调用的函数的函数体中有yield,调用函数的时候,不会执行函数体,也不会获取函数返回值,而是得到了一个生成器对象(函数调用表达式的值就是生成器)
  • 定义生成器对应的函数

    • 生成器创建数据的个数和数据得知,由在执行生成器对应的函数的函数体的时候会遇到几次yield,每次遇到yield的时候对应的数据来决定。

    • 执行函数体会遇到几次yield对应的生成器就可以创建多个数据;每次遇到yield,yield后面的值是什么,对应的元素就是什么。

      def fun3(subject):
          for i in range(1,100):
              yield f"{subject}{i:0>3}"
      
      gen3 = fun3("pyhton")
      print(next(gen3))
      for i in gen3:
          print(i)
      
  • 生成器产生数据原理

    • 调用函数和创建生成器是不会执行函数体,获取生成器中的元素的时候才会执行函数体;每次在执行函数体的时候从开始位置开始,执行到yield就停下来,并且将yield后面的数据作为获取到的元素。
3. 模块
  • 模块:Python中一个py文件就是一个模块

  • 如何在一个模块中使用另外一个模块的内容:

    • 前提:被使用模块的模块名(py文件的文件名)必须符合变量的要求
    • 使用原则:先导入才能使用(能被别的模块使用的内容只能是全局变量)
  • 导入模块

    • 方法1:import 模块名 - 导入指定模块,导入通过"模块名.XXX"的方式使用这个模块中的所有的全局变量

      # 方法1:导入指定模块
      import test1
      print(test1.a)
      test1.func1()
      print(test1.password)
      
    • 方法2:from 模块名 import 变量1,变量2… - 导入指定模块中的指定变量,导入后可以直接使用所有指定的变量

      # 方法2: 导入指定模块中的指定变量
      from test1 import a,func1,password
      print(a)
      print(password)
      func1()
      
    • 方法3:from 模块名 import * - 导入指定模块中的所有的变量,导入后可直接使用

      # 方法3:导入指定模块中的所有的变量
      from test1 import *
      print(a)
      print(password)
      func1()
      
    • 方法4:import 模块名 as 新模块名 - 导入模块的时候对模块重命名,通过"新模块名.XXX"的方式使用模块中的所有的全局变量。

      # 方法4:导入模块的时候对模块重命名
      import test1 as t1
      print(t1.a)
      print(t1.password)
      t1.func1()
      
    • 方法5:from 模块名 import 变量1 as 新变量1,变量2 as 新变量2,… - 对导入模块的变量重命名

      5:对导入模块的变量重命名
      from test1 import a,func1,password as psd
      print(a)
      print(psd)
      func1()
      
  • 导入模块的原理

    • 不管以什么样的方式导入了模块,或者模块中的内容。系统都会在导入模块的时候进入对应的模块,将模块中的代码全部执行。

    • 根据原理存在的问题,可能存在在导入模块的时候执行一些完全没有必要执行的代码。

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

      • 在被导入的模块中添加指定的if语句(if __name__= “__main__”),将不需要被执行的模块执行代码放入这个语句if 语句中

        def func1():
            print("test")
        if __name__ == '__main__':
            for i in range(5):
                func1()
        
4.包
  • 包:

    • 包就是包含__init__.py文件的文件夹
    • 包就是用来管理py文件,对py文件按照特定的的方式进行分类
  • 怎么使用包中的内容

    • 方法1:import 包名 - 导入指定的包(必须是包,文件夹无意义),导入后可以通过"包名.xxx"的方式使用__init__文件中的内容
    • 方法2:import 包名.模块名 - 导入指定包中的指定模块(可以重命名),文件夹也可以用
    • 方法3:from 包名 import 模块名1,模块名2,… - 导入指定包中的指定的一个或多个模块,文件夹也可以用。
    • 方法3:from 包名.模块名 import 变量1,变量2,… - 导入指定包中的指定模块,文件夹也可以用
  • __init__作用

    • 添加快捷键
    • 封装通用工具
5. 异常
  • 异常就是错误

    • 如果出现异常,会中断程序的执行(让程序提前结束)
    • exit() - 让程序正常退出
  • 异常捕获 - 让程序再出现异常的时候,不崩溃,还可以接着往后执行

    • 注意:不要滥用;如果是因为使用者使用不当导致程序出现异常,又希望在出现异常程序可以继续执行才使用异常捕获

    • 结构一:捕获所有的异常

      try:
          代码段1(需要捕获异常的代码段)
      except:
          代码段2(捕获到异常需要执行的代码)
          
      # 执行过程,先执行代码段1,如果出现异常直接马上执行代码段2;如果没有出现异常,就不执行代码段2
      
      # 举例:
      try:
          age = int(input("请输入年龄:"))
          # 当年龄输入错误时,马上执行except,不会继续判断是否成年。
          if age >= 18:
              print("成年")
          else:
              print("未成年")
      except:
          print("年龄输入有误")
      
    • 结构二(捕获指定异常):

      异常结构二:
      try:
          代码段1(需要捕获异常的代码段)
      except 异常类型:
          代码段2(捕获到异常需要执行的代码)
      
      执行过程,先执行代码段1,如果出现异常先判断出现的异常类型,如果是要捕获的异常,直接马上执行代码段2;如果不是要捕获的异常,就执行代码段2
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值