s21day17 python笔记
程序员文章站
2022-11-27 16:02:26
s21day17 python笔记 一、内容回顾及补充 1. 回顾 2. 补充 第三方模块补充 需要下载安装后才能导入使用 安装方式: pip包管理工具 源码安装 安装路径:C:\Python37\Lib\site packages 常用的第三方模块:requests / xlrd 二、 迭代器 2 ......
s21day17 python笔记
一、内容回顾及补充
回顾
-
补充
-
第三方模块补充
需要下载安装后才能导入使用
-
安装方式:
- pip包管理工具
# 把pip.exe 所在的目录添加到环境变量中。 pip install 要安装的模块名称 # pip install xlrd
- 源码安装
# 下载源码包(压缩文件) -> 解压 -> 打开cmd窗口,并进入此目录:cd c:\python37\lib\site-packages # 执行:python3 setup.py build # 执行:python3 setup.py install
安装路径:c:\python37\lib\site-packages
常用的第三方模块:requests / xlrd
-
二、 迭代器
2.1 基本知识
用途:对 某种对象(str/list/tuple/dict/set类创建的对象-可迭代对象)中的元素进行逐一获取
表象:具有
__next__
方法且每次调用都获取可迭代对象中的元素(从前到后一个一个获取)-
示例:
- 列表转换成迭代器:
- v1 = iter([11,22,33,44])
v1 = [11,22,33,44].__iter__()
- 迭代器想要获取每个值:反复调用
val = v1.__next__()
v1 = [11,22,33,44] # 列表转换成迭代器 v2 = iter(v1) # 迭代器获取每个值 result1 = v2.__next__() print(result1) result2 = v2.__next__() print(result2) result3 = v2.__next__() print(result3) result4 = v2.__next__() print(result4) result5 = v2.__next__() print(result5) # 报错:stoplteration 表示已经迭代结束
- 列表转换成迭代器:
-
for循环:运用了迭代器
v1 = [11,22,33,44] # 1.内部会将v1转换成迭代器 # 2.内部反复执行 迭代器.__next__() # 3.取完不报错 for item in v1: print(item)
2.2 可迭代对象
- 标记:
- 内部具有
__iter__()
方法且返回一个迭代器。(*) - 可以被for循环
- 内部具有
三、 生成器
3.1 基本知识
可以理解为:函数的变异、特殊的迭代器、特殊的可迭代对象
-
生成器的作用:
- 生成数据
- 迭代
-
示例:
# 生成器函数(内部是否包含yield) def func(): print('f1') yield 1 print('f2') yield 2 print('f3') yield 100 print('f4') # 函数内部代码不会执行,返回一个 生成器对象 。 v1 = func() # 生成器是可以被for循环,一旦开始循环那么函数内部代码就会开始执行。 for item in v1: print(item)
3.2 总结
-
重点:
- 函数中如果存在yield,那么该函数就是一个生成器函数
- 调用生成器函数会返回一个生成器
- 生成器只有被for循环时,生成器函数内部的代码才会执行,每次循环都会获取yield返回的值
-
建议:
生成器函数中一般不要有return
-
如果需要终止生成器函数中的循环,可以用return
def func(): count = 1 while true: yield count count += 1 if count == 100: return val = func() for item in val: print(item)
-
生成器示例:读取大文件内容
def func(): # 分批去读取文件中的内容,将文件的内容返回给调用者。 cursor = 0 while true: f = open('db', 'r', encoding='utf-8') # 通过网络连接上redis # 代指 redis[0:10] f.seek(cursor) data_list =[] for i in range(10): line = f.readline() if not line: return data_list.append(line) cursor = f.tell() f.close() # 关闭与redis的连接 for row in data_list: yield row for item in func(): print(item)
上一篇: 一个PHP验证码类代码分享(已封装成类)
下一篇: PHP如何解决网站大流量与高并发的问题