json

一、单元测试和文档测试

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值