一、单元测试和文档测试
1.1 单元测试
作用:对一个函数,模块或者一个类进行正确性的校验工作
1.2 文档测试
作用:可以提取注释中的代码执行
doctest严格Python交互模式下的写法
二、json模块
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。
json的组成:
- 数据保存在键值对中:‘name’:'tom
- 数据项由逗号分隔
- {}表示对象(字典)
- []表示列表
实例:{
“省”: “北京”,
“市”: [{“市名”: “北京”,“编码”: “101010100”}, { “市名”: “朝阳”, “编码”: “101010300”}
}
在python解析json,可以引入内置json模块
- json字符串转python对象
import json
s1 = """
{"省": "北京","市": [{"市名": "北京","编码": "101010100"}, { "市名": "朝阳", "编码": "101010300"}]}
"""
obj1 = json.loads(s1)
print(obj2,type(obj2))
- python对象转json字符串
person = {"name":"tom", "age":18, "sex":True}
s1 = json.dumps(person)
print(s1,type(s1))
- 加载json文件
with open('json/car.json',encoding='utf-8') as fp:
cars = json.load(fp)
print(cars)
- 写json文件
d1 = {'name':'jerry','age':18}
with open('person.json','w') as fp:
json.dump(d1,fp)
三、发邮件和发短信
-
发短信
阿里云
-
下载官方的demohttps://help.aliyun.com/document_detail/55359.html?spm=a2c4g.11186623.4.3.SK7RET
-
到demo目录中做安装
打开cmd python setup.py install #需要选择python的版本
-
配置发送的const.py
ACCESS_KEY_ID = "LTAIDHOYSjYcvyVt" # ACCESS_KEY_SECRET = "qrEgykmXX4e6GUMFOqzuiLZ5gsUxSC"
# -*- coding: utf-8 -*- import sys import json from aliyunsdkdysmsapi.request.v20170525 import SendSmsRequest from aliyunsdkdysmsapi.request.v20170525 import QuerySendDetailsRequest from aliyunsdkcore.client import AcsClient import uuid from aliyunsdkcore.profile import region_provider from aliyunsdkcore.http import method_type as MT from aliyunsdkcore.http import format_type as FT import const """ 短信业务调用接口示例,版本号:v20170525 Created on 2017-06-12 """ try: reload(sys) sys.setdefaultencoding('utf8') except NameError: pass except Exception as err: raise err # 注意:不要更改 REGION = "cn-hangzhou" PRODUCT_NAME = "Dysmsapi" DOMAIN = "dysmsapi.aliyuncs.com" acs_client = AcsClient(const.ACCESS_KEY_ID, const.ACCESS_KEY_SECRET, REGION) region_provider.add_endpoint(PRODUCT_NAME, REGION, DOMAIN) def send_sms(business_id, phone_numbers, sign_name, template_code, template_param=None): smsRequest = SendSmsRequest.SendSmsRequest() # 申请的短信模板编码,必填 smsRequest.set_TemplateCode(template_code) # 短信模板变量参数 if template_param is not None: smsRequest.set_TemplateParam(template_param) # 设置业务请求流水号,必填。 smsRequest.set_OutId(business_id) # 短信签名 smsRequest.set_SignName(sign_name) # 数据提交方式 # smsRequest.set_method(MT.POST) # 数据提交格式 # smsRequest.set_accept_format(FT.JSON) # 短信发送的号码列表,必填。 smsRequest.set_PhoneNumbers(phone_numbers) # 调用短信发送接口,返回json smsResponse = acs_client.do_action_with_exception(smsRequest) # TODO 业务处理 return smsResponse if __name__ == '__main__': __business_id = uuid.uuid1() params = "{\"number\":\"12345\"}" res = send_sms(__business_id, "15116905290", "成少雷", "SMS_102315005", params) print(json.loads(res))
-
-
发送邮件
163邮箱
四. 枚举类【扩展】
枚举类型看做一种标签或者一系列常量的集合,常用来表示某些特定的有限的集合
举例:星期,月份、性别
可以使用字典,类的形式实现
#1.字典 weekday = { "MON":1, "TUS":2, "WED":3, "THUR":4, "FRI":5 } print(weekday) weekday["MON"] = weekday["FRI"] print(weekday) #2.类 class Color(object): #类属性 RED = 0 GREEN = 1 BLUE = 2 c = Color() Color.RED = 10 #说明:枚举:不能实例化,其中的枚举成员不能随意更改
上面两种定义方式缺点是很明显的,就是枚举的值是可修改的
Python3.4之后提供了enum
from enum import Enum,IntEnum,unique #1 #在Python3.4之后新增的特性。enum标准库 #enum提供了Enum【类】、IntEnum【类】、unique【@unique,装饰器】三个工具 #Enum:继承自Enum,普通的枚举类 #IntEnum:继承自IntEnum,限定枚举成员必须为整数类型 #unique:@unique,作为一个装饰器,限定枚举成员的值不可重复 #2 #WEEKDAY被称为枚举类 try: @unique class WEEKDAY(Enum): # 类属性/枚举成员/枚举常量:命名最好遵循常量命名法 MON = 5 TUES = 2 WED = 3 THUR = 4 FRI = 5 except ValueError as e: print(e) #duplicate【重复】 values found in <enum 'WEEKDAY'>: FRI -> MON #3.ENUM的成员均为单例,并且不可更改,不能进行实例化 #COLOR.RED = 10 #AttributeError: Cannot reassign members. print(COLOR.RED) #COLOR.RED #4获取枚举的名称和值 print(WEEKDAY.MON,WEKKDAY['MON'],WEEKDAY.MON.name) #名称 print(WEEKDAY.MON.VALUE) #值 #5枚举常见操作 for mem in WEEKDAY: print(mem.name,mem.value) #可进行判等比较 print(WEEKDAY.MON != WEEKDAY.FRI) #TRUE #身份比较 print(WEEKDAY.MON is not WEEKDAY.FRI)