测试开发进阶(二)
结构化工程
https://pythonguidecn.readthedocs.io/zh/latest/writing/structure.html
- readme: 对项目的整体介绍,同时也是一份使用手册
- LICENS:阐述该项目的许可说明和授权
- setup.py:通过setup把核心代码打包
- api_test:存放项目的核心代码
- requirements.txt:项目依赖的第三方库
- docs:包的参考文档
- tests:代码的测试
- makefile:同于项目的管理,根据项目需求添加其他的文件和目录
数据类型扩展
基本数据类型
数值
整数
浮点数
布尔类型
decimal
复数
序列类型
- 字符串
- 元祖
- 列表
元祖在定义的时候就确认了存放的空间,内存固定,占用空间较小
列表的空间可以动态变化,内存占用的空间比元祖大的多
在数据固定的情况下使用元祖
散列
- 字典
- 集合
命名元祖
1 | from collections import namedtuple |
普通元祖:
1 | tu = ('zx', '1994', '男') |
命名元祖:
使用namedtuple
相当于创建了一个类,s1
相当于实例话了一个包含name
,age
,gender
三个属性的类。
__main__
:当前模块下
1 | from collections import namedtuple |
推导式
列表推导式
普通列表创建
1 | l = [1, 2, 3, 4] |
列表推导式
1 | urls = [f'http://....?page={i}' for i in range(0,101,10)] |
三目运算
1 | a = 10 |
1 | a = 4 |
结合列表推导式
1 | [i for i in range(10) if i % 2 == 0] # [0, 2, 4, 6, 8] |
####字典推导式
1 | dic = {i for i in [1, 2, 3]} |
生成器表达式
1 | tu = (i for i in range(5)) |
迭代器和生成器
生成器的作用:当我们要存储大量数据的时候,使用生成器可以节约内存
创建生成器的方式:
- 生成器表达式
- yield
只能用于函数中,当一个函数中出现yield这个关键字,那么这个函数就是一个生成器函数。
1 | # yield 后面不写东西 |
1 | # yield 后面写i |
1 | def gen3(): |
可迭代对象和迭代器
- 可迭代对象
对象内部实现了迭代协议的称之为可迭代对象
迭代协议:该对象实现了
__iter__
方法
可迭代对象都可以使用
for
循环进行遍历能够使用
for
循环进行遍历的都是可迭代对象
1 | li = [11, 22, 33, 44] |
- 迭代器
要求:
- 对象实现了迭代协议
- 内部还要实现
__next_
方法next()方法
通过iter()可以将可迭代对象转化为迭代器
生成器是一种特殊的迭代器
1 | li = [11, 22, 33, 44] |
迭代器和生成器的区别:
- 生成器相比迭代器多了三种方法:
send()
,close()
,throw()
- send():与生成器内部进行数据交互
1 | def gen(): |
1 | def gen1(): |