Python8
1、模块和包
1.1概述
1、模块:在python中,每一个python文件都是一个模块(module)。
2、包(package):在一个包里面会有很多模块。
3、包与文件夹的区别:包里面有_init _.py文件;文件夹里没有。
4、如何创建包和文件夹:
(1)创建包,如下图,包的中间有一个小孔。
1.2模块间的调用
一个模块调用另一个模块中的所有的内容,前提是另一个模块是一个包中的,用的是from (包的位置).package.module import (代表所有内容)。
在另一个模块中调用
2、动态参数
1、函数的形式参数个数不确定 2、函数的形式参数数据类型不存在
*:代表的是元祖(非键值对均为元祖) **:代表的是字典(上传元素要是键值对)
动态参数场景
1、接口测试中,有个接口,有时候请求需要4个参数,有时候需要5个,有时候需要6个,有时候一个不需要
'''
def data1():
return{}
def data2():
return {'name':'qqq','age':'18','address':'xian','sex':"M"}
def data(**kwargs):
return kwargs
print(data())
print(data(name='qqq'))
print(data(**{'name':'qqq','age':'18','address':'xian','sex':"M"}))
3、库的管理
3.1、标准库
安装python解释器后,直接自带的库称为标准库,常用标准库如:os、time、datetime、hashlib、json、sys、csv。
3.2os库:该模块提供了针对路径的处理
3.2.1os库的常用函数如下:
import os
#获取当前路径
print(os.path.dirname(__file__))
#获取当前路径的上一级路径
print(os.path.dirname(os.path.dirname(__file__)))
base_dir=os.path.dirname(os.path.dirname(__file__))
#路径拼接
print(os.path.join(base_dir,'data','log'))
filepath=os.path.join(base_dir,'data','log')
with open(file=filepath,mode='r',encoding='utf-8')as f:
print(f.read())
3.1.2获取操作系统
#获取操作系统
print(os.name)
3.1.3判断目录文件
#判断目录是否存在
print(os.path.exists('F:\TestDev'))
#判断是否是文件
print(os.path.isfile('F:\TestDev'))
3.1.4输出文件夹下的内容
for item in os.listdir('F:\TestDev'):
print(item)
3.1.5调用网站
print(os.system('ping www.baidu.com'))
3.3time库:提供各种与时间有关的库
3.3.1获取时间戳
import time as t
print('获取当前时间的时间戳:',t.time())
3.3.2以字符串格式获取当前时间
import time as t
print('返回当前时间的字符串:',t.ctime())
import time as t
print('时间戳转为字符串:',t.ctime(t.time()))
print('本地化:',t.localtime(t.time()).tm_year)
print('常用时间:',t.strftime('%y-%m-%d %H:%M:%S',t.localtime()))
print('常用时间:',t.strftime('%y-%m-%d %x',t.localtime()))
3.3.3程序休眠
t.sleep(5) #休眠
print('五秒后运行')
3.4datetime库: 该模块也是表达时间的,但是比time更加直观
3.4.1查询当前时间
import datetime
print(datetime.datetime.now())
3.4.2在当前时间增加或减少时间
import datetime
print(datetime.datetime.now()+datetime.timedelta(days=10))
3.4.3时间戳转换为当前时间
import datetime
print(datetime.datetime.fromtimestamp(time.time()))
3.5hashlib:该模块是专门处理处理加密
open API:开发平台,开放平台可以理解为一个公司对外的窗口,公司通过开放平台将内部的标准、数据和服务等以API的形式开放出来,供第三方开发者使用,以便达到数据交互、合作共赢的目的。
开放平台接口加密的步骤:
(1)对请求参数进行排序;
(2)排序之后处理成key1=value1&key2=value2的形式;
(3)进行md5的加密,生成密钥。
import hashlib
from urllib import parse
import time
def sign():
dict1={'name':'qqq','age':20,'sex':'M','time':time.time()}
data1=dict(sorted(dict1.items(),key=lambda item:item[0])) #字典排序
print(data1)
data2=parse.urlencode(data1) #把排序后的结果处理成key1=value1&key2=value2
print(data2)
m=hashlib.md5() #对请求参数进行md5加密
m.update(data2.encode('utf-8')) #把字符串数据类型处理为bytes数据类型
print('加密后的结果信息:\n',m.hexdigest()) #执行加密
sign()
3.6json:该模块可以实现序列化与反序列化
(1)序列化:把内存里的数据类型转为字符串的数据类型,使能够存储到硬盘或通过网络传输到远程,因为硬盘或者网络传输时只接受bytes的数据类型。简单的说就是把Python的数据类型(字典,元组,列表)转为str的数据类型过程。
(2)反序列化,就是str的数据类型转为Python对象的过程。
3.6.1列表的序列化与反序列化
list1=[x for x in range(6)]
list1_str=json.dumps(list1)
print(list1,type(list1_str))
str_list1=json.loads(list1_str)
print(str_list1,type(str_list1))
3.6.2元组的序列化与反序列化
tuple1=('go','java')
tuple1_str=json.dumps(tuple1)
print(tuple1_str,type(tuple1_str))
str_tuple=json.loads(tuple1_str) #元祖方序列化为列表
print(str_tuple,type(str_tuple))
3.6.3字典的序列化与反序列化
dict1={'name':'名字','age':'18','sex':'M'}
#indent=True:字符串结构化输出
#ensure_ascii=False:处理中文
dict1_str=json.dumps(dict1,indent=True,ensure_ascii=False)
print(dict1_str,type(dict1_str))
str_dict1=json.loads(dict1_str)
print(str_dict1,type(str_dict1))
dict1={'name':'名字','age':'18','sex':'M'}
#文件的反序列化,就是从文件中读取文件内容,读取到的文件的数据类型是字典。
json.dump(dict1,open('json.txt','w',encoding='utf-8'))
data=json.load(open('json.txt'))
print(data,type(data))