知识点一:迭代器
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方法;定义迭代器,必须实现
iter和 next方法。
知识点三:包与包管理
什么是包?
包是一种组织模块的方式,它将多个相关的模块组织在一个文件夹中,并包含一个特殊的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加密后的值来比较两种图片是否相同