Python基础学习(9)迭代器/生成器

Python基础学习(1)基本知识
Python基础学习(2)序列类型方法与数据类型转换
Python基础学习(3)进阶字符串(格式化输出)
Python基础学习(4)散列类型(无序序列)
Python基础学习(5)流程控制
Python基础学习(6)函数基础与函数参数
Python基础学习(7)函数作用域与名称空间.
Python基础学习(8)函数进阶-闭包/装饰器
Python基础学习(9)迭代器/生成器

一,迭代器

迭代就是重复 但是每一次的重复都是在上一次的基础上升级(更新换代)
迭代特点: 每一次就迭代得到的结果都是下一次迭代的初始值
迭代:
1.里面有多个数据
2.数据之间存在关联性

可迭代对象转变为迭代器

1.声明迭代器

语法一:
变量名=迭代器名称. __ iter__()
语法二:
变量名=iter(迭代器名称)

2.迭代器语法

语法一:
迭代器名称.next()
语法二:
next(迭代器名称)

# 迭代器next一次只能取值一个  并且是向下取值不能回头
# 当进行迭代取值时 超过数据长度会进行报错
 for i in range(3): # 单纯的重复 并没有改变 不是迭代
      print('大家都是好样的')
      print(i)  # 存在关联性

可迭代对象: 字符串 元组 列表 集合 字典(对象是key)
只要内置有__iter__()的方法就是可迭代对象

mes = {'name': '婷', 'name1': '谢', 'name2': ''}
res = mes.__iter__()
print(res)
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res)
res = mes.__iter__()
while True:
    try:
        print(res.__next__())  # 把你可能出现异常的代码缩进去
    except StopIteration:  # 捕捉异常
        break  # 捕捉异常之后做什么 我就直接break结束循环
res =iter(mes)
print(next(res))
print(next(res))
print(next(res))

总结 就是把可迭代对象转换为迭代器再自动把里面的数据一个个取出 针对字典不用键取值的方法
一次性 选择就不能回头 取完就gg
迭代器其实就是不依赖于索引/方法也可以获取到值的一个操作

二,生成器

生成器: 可以理解为自定义的迭代器 当一个函数中yield 这个关键字的话 那么这个函数就是生成器

def food():
    for i in range(5):
        yield f'你输入的数字是{i}'
res=food()
print(next(res))
print(next(res))
print(next(res))
print(next(res))

生成器作用和返回值类似 但是函数遇到生成器的时候不是结束 而是暂停
函数返回值代表break 结束函数

def fun():
    print(66)
    yield '5'
    print(888)
    yield '6'

fun=fun()
print(next(fun))
print(next(fun))
#66
#5
#888
#6
# 生成器是生成数据 函数里就是返回生成器里的数据 这个的话就是因为生成器只有一个数据
# 所以在返回之后 再次调用生成的话就会报错

三,文件操作

用python代码来操作电脑里的文件(txt,exe,md,py,MP3) – 文本/图片/音频

1.文件操作三要素:

1.打开文件
2.操作文件
3.关闭文件

2.文件操作模式:

 w:write 写入数据 如果文件里有数据 会覆盖
 a:append 追加数据 如果文件里有数据 不会覆盖而是追加到后面
 r:read 读取数据 获取文件里的内容

3.文件的数据类型:

t:text 文本数据 文件模式默认就是文本数据
b:byte 以字节码的方式来操作数据 -- 目前不需要使用 后续学到网络编程/爬虫的时候会使用
wb: 以字节码的方式写入数据
wt: 以文本方式写入数据
rb: 以字节码的方式获取数据

4.文件操作的基本语法:

打开文件:
    f=open(文件路径\文件名,操作方式,字符编码)
    # 如果没写文件路径 默认就是当前文件夹
    f 是作为文件对象 名字不固定 但是一般是叫f

操作方式:
r	以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w	打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a	打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写	入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb	以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
wb	以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文	件。
ab	以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新	的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+	打开一个文件用于读写。文件指针将会放在文件的开头。
w+	打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+	打开一个文件用于读写,如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果改文件不存在,创建新文件用于读写。
rb+	以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头
wb+	以二进制格式打开一个文件用于读写。如果改文件已存在则会覆盖。如果改文件不存在,创建新文件。
ab+	以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果改文件不存在,创建新文件用于读写。

操作文件:
    读:
        f.read() # 读取所有数据
        f.readline() # 一行行读取数据
    写:
        f.write(数据)

关闭文件:
    f.close()
f.closed -- 文件是否已经关闭 True关闭 False没关闭
f.writable() -- 判断文件是否可写
f.readable() -- 判断文件是否可读

上下文管理器 with

为了避免没有关闭文件导致内存泄漏 有种更推荐的写法 叫 with open 这个写法会运行完后自动关闭程序
with open(文件路径\文件名,操作方式,字符编码)as f:
    文件操作代码
with open 会自动帮我们关闭文件
as -- 取别名
# 打开文件
file_path = "example.txt"
f = open(file_path, "r+", encoding="utf-8")

# 判断文件是否已经关闭
print(f.closed)  # 输出 False

# 判断文件是否可写
print(f.writable())  # 输出 False

# 判断文件是否可读
print(f.readable())  # 输出 True

# 读取所有数据
data = f.read()
print(data)

# 关闭文件
f.close()

# 再次判断文件是否已经关闭
print(f.closed)  # 输出 True

四,高内聚低耦合

高内聚 – 一个程序/函数做的事情尽量要统一 专一性 而不是一个函数里面写了一堆的功能这样容易一个错步步错

低耦合 – 程序与程序 函数与函数之间关联性尽量要低 各做各的 不要互相参透太守 避免一个错 步步错

高内聚=一个程序/函数专注做好一件事 = 专一性
低耦合=函数/程序之间嵌套 关联性尽量少 = 离散型

相关推荐

  1. Python基础学习(9)/生成器

    2024-03-11 03:42:03       39 阅读
  2. Python基础

    2024-03-11 03:42:03       44 阅读
  3. python基础——

    2024-03-11 03:42:03       43 阅读
  4. python基础---

    2024-03-11 03:42:03       44 阅读
  5. Python学习之-生成器

    2024-03-11 03:42:03       29 阅读
  6. Python学习4---生成器的区别

    2024-03-11 03:42:03       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-11 03:42:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-11 03:42:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-11 03:42:03       82 阅读
  4. Python语言-面向对象

    2024-03-11 03:42:03       91 阅读

热门阅读

  1. SQL注入攻击 - 堆叠注入(Stacked Injection)

    2024-03-11 03:42:03       47 阅读
  2. python实现数据爬虫

    2024-03-11 03:42:03       42 阅读
  3. 唤起原生IOS和安卓Android app的方法

    2024-03-11 03:42:03       42 阅读
  4. 在C#中使用Linq

    2024-03-11 03:42:03       43 阅读
  5. 读取CSV数据并写入MySQL

    2024-03-11 03:42:03       40 阅读
  6. G1垃圾收集器

    2024-03-11 03:42:03       36 阅读
  7. 使用Golang开发以太坊(一)

    2024-03-11 03:42:03       41 阅读
  8. 【Vue3】Ref 和 ShallowRef 的区别

    2024-03-11 03:42:03       46 阅读
  9. MySQL和Redis Common Command

    2024-03-11 03:42:03       46 阅读
  10. 什么是生活?(2024-2-26)

    2024-03-11 03:42:03       50 阅读
  11. vim基本使用

    2024-03-11 03:42:03       42 阅读
  12. 京东面试官问我,你在catch块中写业务代码吗?

    2024-03-11 03:42:03       54 阅读
  13. Docker容器管理的内容与作用

    2024-03-11 03:42:03       45 阅读