day13 迭代器

day 13. 迭代器

  1. 什么是迭代器(iter)

    迭代器是容器型数据类型,不支持增删改

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

    如果想要使用迭代器中的元素,必须将元素从迭代器中取出,而且在取的时候只能从上往下按顺序取,取一个少一个,取出来的数据无法再放回迭代器。

  2. 创建迭代器的方式:

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

    2)创建生成器

    i1=iter(‘abc’)

    print(i1)

    #print(len(i1))

    i2=iter([10,20,30,40])

    print(i2)

    #print(len(i2))

    验证如下:
    在这里插入图片描述

    1. 迭代器的查操作

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

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

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ncL6k4Nz-1659526785892)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220803184922424.png)]

      2)遍历

      3)迭代器转换成序列
      在这里插入图片描述

注:当next执行空的迭代器,便会报错!

  1. 生成器(可创建多个数据)

    1)什么是生成器?

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

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

    如果需要使用生成器中的数据,必须将数据取出来,取走一个少一个。

    生成器获取数据的方式和迭代器一样。

    2)创建生成器

    生成器保存的并不是数据本身,而是产生数据的算法(算法:创建数据的过程)

    怎么创建生成器:调用带有yield关键字的函数,就可以得到一个生成器
    在这里插入图片描述
    如果被调用的函数的函数体中有yield,调用函数的时候不会执行函数体,也不会获取函数返回值,而是得到一个生成器对象(函数调用表达式的值就是生成器)

    1. 定义生成器对应的函数

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

      执行函数体会遇到几次yield对应的生成器就可以创建多少个数据

      每次遇到yield,yield后面的值是什么,对应的元素就是什么

      def func2():
          yield 100
          yield 200
          yield 300
      
      
      gen2 = func2()
      print(next(gen2))
      print(next(gen2))
      print(next(gen2))
      
      # print(next(gen2))  # 报错!!!
      
      def func3(subject):
          for i in range(1, 100):
              yield f'{subject}{i:0>3}'
      
      gen3 = func3('python')
      print(next(gen3))
      for i in gen3:
          print(f'i:{i}')
      
      print('分割线:', '==' * 50)
      

4.生成器产生数据的原理

调用函数创建生成器的时候不会执行函数体,获取生成器中元素的时候才会执行函数体。
每次在执行函数体的时候从开始位置开始,执行到yield就停下来,并且将yield后面的数据作为获取到的元素

# 协程
def func4():
    print('===1===')
    yield 10
    print('===2===')
    yield 20
    print('===3===')
    yield 30


gen4 = func4()
print(next(gen4))
print('分割线:', '++' * 50)
print(next(gen4))
print('分割线:', '++' * 50)
print(next(gen4))


def get_file_data():
    f = open('', encoding='utf-8')
    while True:
        data = f.readline()
        if not data:
            break
    yield data


reader = get_file_data()
print(next(reader))


模块

1.什么是模块 - python中一个py文件就是一个模块

2.怎么在一个模块中使用另外一个模块的内容

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

使用原则:先导入才能使用(能被别的模块使用的内容只能是全局变量)

3.怎么去导入模块

1)import 模块名 – 导入指定模块,导入后可以通过’模块名.xxx’的方式使用这个模块中所有的全局变量

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

3)from 模块名 import* – 导入指定模块中所有的变量,导入后可以直接使用所有变量

4)import 模块名 as 新模块名 – 导入模块的时候对模块重命名,通过’新模块名.xxx’的方式用模块中所有的全局变量

5)from 模块名 import 变量1 as 新变量1,变量2 as 新变量2,. . . – 对导入的变量重命名

====导入方式1====
import test1

print(test1.a)
print(test1.name)
test1.func1()
====导入方式2====
from test1 import name,a,func1

print(name)
print(a)
func1()
====导入方式3====
from test1 import *

print(name)
print(a)
func1(10)
====导入方式4:对模块重命名====
import numpy as np
import test1 as t1

test1 = 22
print(t1.a)
print(t1.name)
t1.func1()
====导入方式5:对变量重命名====
from test1 import a, name as tname

name = '小明'
print(a)
print(name)
print(tname)

4.导入模块的原理

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

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

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

在被导入的模块中添加指定的if语句(if _ _ name_ ==’ _ _ main_ _'),将不需要别别的模块执行的代码放入这个if语句中

# import test1
# from test1 import a
if __name__ == '__main__':
    # 这个if语句中的代码不会被别的模块执行
    pass


1.什么是包

包就是包含_ _init _ _.py文件的文件夹

包就是用来管理py文件,对py文件按照特定的方式进行分类

2.怎么使用包中的内容

import 包名 – (必须是包,文件夹无意义),导入后可以通过’包名.xxx’的方式使用_ __init__py文件中的内容

import 包名.模块名 – 导入指定包中的指定模块(文件夹也可以)

from 包名 import 模块名1,模块名2,. . .

from 包名.模块名 import 变量1,变量2,. . .

# ===直接导入包===
# import fileManage
#
# print(fileManage.x)
# ===直接导入包中的模块,然后重命名===
# import files.test2
#
# print(files.test2.x)
# ===直接导入包中指定的多个模块===
# from fileManage import open,close
# ===导入指定包中指定模块中的指定内容===
# from files.test2 import *
#
# print(func1())
# from files.manage.test2 import *
#
# print(func1())

from fileManage import func, remove_file

func()
remove_file()

init_.py

1.创建快捷键

from fileManage.open import funo

2.封装通用工具

def remove_file():
print(‘删除文件’)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值