模块
每一个.py文件即是模块,封装了类、方法、变量属性等,像一个工具箱一样提供给外界使用
包
新建一个package/或者目录+ __init__.py文件.
同一个包下面不允许出现一致的文件名
不同包下可以允许出现一致的文件名
导入模块
两种方式
1.import 包名.模块名(如果导入的模块跟当前工作目录处于同一个包下面可以不加包名)
使用包下面的提供的类、方法、全局变量等,用模块名. 名称的方式
2.from 包名.模块名 import 全局变量/类/函数等
导入模块时 会运行模块的可执行代码,如果想被导入不执行模块的可执行代码需在被导入的模块的可执行代码前加入判断,只有__name__ 的属性=__main__的时候才执行
包目录:
---p1.py
---p2.py
#-----------p1.py文件
gl_name = "p1"
class P1:
def p1_func(self):
print(f"我是{gl_name}")
print(p2.gl_name)
def p1_f():
print("hhhh")
if __name__ == "__main__":
P1().p1_func()
#-----------p2.py文件
# 导入p1模块
import p1 as p
gl_name = "p2"
class P2:
def p2_func(self):
print(f"我是{gl_name}")
if __name__ == "__main__":
# 调用p1模块的函数
p.p1_f()
# 调用p1模块的全局变量
print(p.gl_name)
# 调用p1模块的类并实例化
test_p = p.P1()
# 调用实例化方法
test_p.p1_func()
列表矩阵变化
如果有个列表[1,2,3][4,5,6]现在想把这两个列表变成 [1,4][2,5][3,6]有什么办法?
# 方法1
a, b = [1, 2, 3], [4, 5, 6]
c = list(zip(a, b))
d = [list(i) for i in c]
# 方法2
c = [a, b]
s = []
for i in range(3):
d = []
for data in c:
d.append(data[i])
s.append(d)
在接口自动化实际应用中经常需要使用zip和列表矩阵这种思路去组装测试数据。
zip 方法接受两个参数(都是可迭代对象),将 a,b对象的每个元素打包组成新的元祖