• 包, json&pickle模块,time&datetime模块,random模块


    补充:模块的循环导入

    #m1.py
    print('正在导入m1')
    from m2 import y
    x='m1'

    #m2.py
    print('正在导入m2')
    from m1 import x
    y='m2'

    #run.py
    import m1
    报错
    解决循环导入的两种方法
    1.把名字全都往上放,把导入往下放,让名字先加载了
    #m1.py
    print('正在导m1')
    x='m1'
    from m2 import y

    #m2.py
    print('正在导入m2')
    y='m2'
    from m1 import x

    #run.py
    import m1
    2.运用了函数,函数在定义阶段不运行语法
    #m1.py
    print('正在导入m1')
    def func1():
      from m2 import y,func2
      print('来自于m2的y:',y)
    func2()
    x='m1'

    #m2.py
    print('正在导入m2')
    def func2():
      from m1 import x
      print('来自于m1的x:'x)
    y='m2'

    #run.py
    import m1
    m1.func1()

    一.包

    1.什么是包?
    包就是一个含有__init__.py文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来.
    包的本质就是一种模块
    2.为何要用包?
    随着功能越来越多,模块也越来越多,我们就需要用文件夹将模块文件组织起来,以此来提高程序的结构性和可维护性
    3.包的使用
    所有导入都以包的顶级目录作为起始,这种导入叫做绝对导入

    相对导入只能在包内使用 .代表当前文件的文件夹

    二.内置或第三方模块的使用

    2.1 json&pickle

    一.序列化与反序列化介绍
    1. 什么是序列化
    序列化就是将内存中的数据类型转成另外一种格式
    即:
    字典---------序列化--------->其他的格式--------------->存到硬盘
    硬盘---读取---->其他格式----------反序列化-------->字典

    2. 为什么要序列化
      1. 持久保存程序的运行状态(玩游戏的存档)
      2. 数据的跨平台交互

    3. 如何序列化
    json:
    优点: 这种格式是一种通用的格式,所有编程语言都能识别
    缺点: 不能识别所有python类型
    强调:json格式不能识别单引号

    pickle
    优点: 能识别所有python类型
    缺点: 只能被python这门编程语言识别
    二.json模块的使用
    import json
    dic={'k1':True,'k2':10,'k3':'egon','k4':'帅'}
    #序列化
    dic_json=json.dumps(dic)
    #持久化
    with open(r'a.json',mode='wt',encoding='utf-8')as f:
      f.write(dic_json)
    #序列化+持久化
    with open(r'a.json',mode='wt',encoding='utf-8')as f:
      json.dump(dic,f)


    import json
    #从文件中读取json格式化的字符
    with open(r'a.json',mode='rt',encoding='utf-8')as f:
      dic_json=f.read()
    #反序列化
    dic=json.loads(dic_json)
    print(dic)
    # 读取文件内容+反序列化
    with open(r'a.json',mode='rt',encoding='utf-8')as f:
      dic=json.load(f)
      print(dic)

    三.picpkl模块的使用(二进制形式)
    import pickle
    dic={'k1':True,'k2':10,'k3':'egon','k4':'帅'}
    with open(r'b.pkl',mode='wb')as f:
      pickle.dump(dic,f)

    import pickle
    with open(r'b.pkl',mode='rb')as f:
      dic=pickle.load(f)
      print(dic)

    2.2 time&datetime

    time
    时间分为三种格式:
    1.时间戳
    print(time.time())
    2.格式化的字符串
    print(time.strftime('%Y-%m-%d %H:%M:%S %p'))
    3.结构化的时间对象
    print(time.localtime())
    print(time.localtime().tm_hour) #现在的小时
    print(time.localtime().tm_wday ) #这周第几天,从0开始
    print(time.localtime().tm_yday) #这年第几天
    print(time.gmtime())
    #时间转换
    时间戳--->结构化的时间对象struct_time--->格式化的字符串
    import time
    struct_time=time.localtime(123123)
    print(struct_time)
    print(time.strftime('%Y-%m-%d',struct_time))

    格式化字符串--->struct_time--->时间戳
    struct_time=time.strptime('2018-12-05','%Y-%m-%d')
    print(struct_time)
    print(time.mktime(struct_time))

    datetime
    import datetime
    print(datetime.datetime.now())
    print(datetime.datetime.fromtimestamp(123123))
    print(datetime.datetime.now() + datetime.timedelta(days=3)) 三天后
    print(datetime.datetime.now() - datetime.timedelta(days=3)) 三天前
    print(datetime.datetime.now() + datetime.timedelta(days=-3)) 三天前
    print(datetime.datetime.now() + datetime.timedelta(days=3,hours=3)) 三天三小时前

    2.3 random模块(随机模块

    import random
    print(random.random())#(0,1)----float 大于0且小于1之间的小数
    print(random.randint(1,3)) #[1,3] 大于等于1且小于等于3之间的整数
    print(random.randrange(1,3)) #[1,3) 大于等于1且小于3之间的整数
    print(random.choice([1,'23',[4,5]])) #1或者23或者[4,5]
    print(random.sample([1,'23',[4,5]],2)) #列表元素任意2个组合
    print(random.uniform(1,3)) #大于1小于3的小数,如1.927109612082716
    item=[1,3,5,7,9]
    random.shuffle(item) #打乱item的顺序,相当于洗牌
    print(item)

    生成随机验证码
    import random
    def make_code(max_size):
      res=''
      for i in range(max_size):
        num=str(random.randint(0,9))
        alp=chr(random.randint(65,90))
        res+=random.choice([num,alp])
      return res
    print(make_code(5))

  • 相关阅读:
    unity基础开发----Unity获取PC,Ios系统的mac地址等信息
    Web UI设计师需要了解的用栅格化系统指导网页设计
    设计网页,常见的宽度是多少像素?
    C#常用类库简介(二)
    将本地代码上传到gitLab
    删除git 分支
    git 新建分支
    将子分支代码merge到主分支master分支
    dev分支代码覆盖master分支代码
    使用flex的同时设置超出喜爱是省略号,
  • 原文地址:https://www.cnblogs.com/lizeqian1994/p/10073284.html
Copyright © 2020-2023  润新知