迭代器与生成器

知识点一:迭代器

for循环的原理

for循环是通过迭代器来实现的。迭代器是一个可以记住遍历的位置的对象,它实现了iter()和next()方法。

当我们使用for循环遍历一个可迭代对象时,实际上是在调用这个对象的iter()方法来获取迭代器,然后不断调用迭代器的next()方法来获取下一个元素,直到遇到StopIteration异常表示迭代结束。

这是使用for循环遍历一个可迭代对象时

for i in range(100): # 依次拿东西 这就是迭代的过程
print(i)

这是调用这个对象的iter()方法来获取迭代器

li = [1, 2, 3, 4, 5, 6]
itr = iter(li)
try:
    while True:
        b = next(itr)
        print(b)
except StopIteration:
    pass

可迭代对象与迭代器的区别

可迭代对象:具有iter()方法的对象,可以通过该方法返回一个迭代器。

迭代器:具有iter()和next()方法的对象,可以通过next()方法逐个访问元素

一般iter()和next()方法一起使用

自定义可迭代对象

class Mylist:
    def __init__(self, data):
        self.data = data

    def __iter__(self):
        return iter(self.data)

a = Mylist([1, 2, 3, 4, 5, 6])
for i in a:
    print(i)

知识点二:生成器

生成器是一种特殊的迭代器,可以使用yield关键字来返回值。生成器函数在每次调用next()时执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
和return 返回值不同 return返回值之后 不会返回到return语句处继续执行
def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()
print(next(gen))  # 输出 1
print(next(gen))  # 输出 2
print(next(gen))  # 输出 3

关系

  • 可迭代对象(iter
  • 迭代器(iter/next
    • 生成器
  • 序列类型
  • 字典
    1)迭代器包含迭代对象。
    2)如果一个对象拥有 iter 方法,则是可迭代对象;如果一个对象
    拥有next方法,则是迭代器。
    3)定义可迭代对象,必须实现iter方法;定义迭代器,必须实现
    iternext方法。

知识点三:包与包管理

什么是包?

包是一种组织模块的方式,它将多个相关的模块组织在一个文件夹中,并包含一个特殊的init.py 文件来标识该 文件夹 为一个包。包体现了模块的结构化管理思想。

最新版python中 可以不用 init.py 但是最好是加上

什么是模块?

模块是一种以.py为后缀的文件,在文件中定义了一些常量和函数。模块的名称就是该文件的名称。

什么是库?

Python中的库是指一些功能相关的模块和包的组合。它们可以是第三方库,也可以是自定义的库。库提供了一组功能,可以用来完成特定的任务。

pip包管理工具

pip是Python的包管理工具,用于安装、卸载和管理Python包。以下是一些常用的pip命令:
  • pip --- python必备的包管理
  • pip -V:查看pip的版本信息。
  • pip list:列出已安装的包。
  • pip install [package_name]:安装指定的包。
  • pip install -U [package_name]:升级指定的包。
  • pip uninstall [package_name]:卸载指定的包。
  • pip freeze:输出已安装的包及其版本信息。
  • pip show [package_name]:显示指定包的详细信息。
  • pip install --upgrade pip:升级pip本身。
  • pip --help:显示pip的帮助信息。

第三方库 json 和 hashlib 库

json库

# 导入json模块
import json

## 字典转json格式的字符串
dict_a = {"name": 'tongyao', 'age': None, 'isMan': True}
json_a = json.dumps(dict_a)
print(type(json_a), json_a)  # '{"name": "tongyao", "age": null, "isMan": true}'

## json格式的字符串转换成字典
new_dict_a = json.loads(json_a)
print(type(new_dict_a), new_dict_a)  # print(type(new_dict_a), new_dict_a)

hashlib 库 md5加密

  • 1.加密的对象必须是字节类型
  • 2.先得创建出加密对象
  • 3.加密更新
  • 4.查看结果
## md5加密
import hashlib    # 32位16进制数据
a = 'tongyao'.encode()  #  ===> b"tongyao"
m = hashlib.md5(a)
print(m.hexdigest())  # bc621107cd65cf822f400314b290f547
#通过比较md5加密后的值来比较两种图片是否相同
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容