zoukankan      html  css  js  c++  java
  • day16——自定义模块、time、datetime、random

    day16

    自定义模块

    自定义一个模块

    import :导入(拿工具箱)

    # import test
    # test.func()
    
    导入发生的事情
    • 在当前的名称空间中开辟一个新的空间
    • 将模块中所有的代码执行
    • 通过(模块名.)进行查找(函数)工具
    # print(locals())
    # import test
    # print(locals())
    
    # import test
    # print(test.name)
    # print(test.func())
    
    #错误的示例:
    # import test.py
    # # print(test.py.func())
    
    # import test # 
    # import test
    # import test
    # import test
    # import test
    # import test
    # print(test.name)
    
    import test as t:使用别名能够使文件名更短
    # import test as t
    # print(t.name)
    low版
    msg = """
    1.扳手
    2.螺丝刀
    >>>
    """
    # choose = input(msg)
    # if choose == "1":
    #     import meet
    #     meet.func()
    # elif choose == "2":
    #     import test
    #     test.func()
    加强版
    # choose = input(msg)
    # if choose == "1":
    #     import meet as t
    # elif choose == "2":
    #     import test as t
    #
    # t.func()
    
    from 模块名 import 函数名或者变量名
    # from test import func
    # func()
    
    import 和 from 的区别
    • import test as t:把test文件导入(可改别名)

      缺点:占用内存比较大

      优点:不会和当前文件定义的变量或者函数发生冲突

       优点:  
      # import test
      # name = "宝元"
      # print(test.name)
      # print(name)
      
    • from test import func as f:取一个函数(可改别名)

      优点:占用内存比较小

      缺点:会和当前文件定义的变量或者函数发生冲突

      缺点:	
      # name = "宝元"
      # from test import name
      # print(name)
      
      解决方法:
      # name = "宝元"
      # from test import name as n
      # print(name)
      # print(n)
      

    from test import *(把所有方法放在本文件中,会出现覆盖的现象,不能解决)不介意使用

    # name = "宝元"
    # def func():
    #     print("is 马桶推送器")
    
    # from test import *
    # print(name)
    # func()
    

    all = ['可以被导入的函数名和变量名'] (配合*使用),在模块内使用可以限制传入的函数和变量

    # from meet import *
    # print(func)
    # print(name)
    
    模块的分类
    • 内置模块(标准库)——python解释器自带的.py文件(模块)
    • 第三方模块(各种大神写的)——需要额外下载(并发编程开始讲解pypy)
    • 自定义模块(自己写的)——不需要额外下载
    模块的两种用法
    • 脚本:在cmd中执行python test.py
    • 模块:不使用或者导入
    分模块

    分模块(一个模块可以被多个文件调用)的好处:

    • 避免写重复代码
    • 可以多次利用
    • 拿来主义
    模块导入的坑

    不要让循环导入发生

    模块中的测试和调用(main

    在当前模块中使用______name______就是''main''

    当模块被导入的时候______name______就是被导入的模块名

    模块里面是测试:__name__ == '__main__'
    运行时会运行
    # 
    
    #     func()
    
    导入的时候:__main__ == 模块名
    运行不会运行
    
    查找模块的方法

    如果所找的文件不在本文件夹里:

    • 导入路径

      from day15 import meet

      # import meet
      # print(meet.name)
      
    • 使用相对路径

      from day15.ti import meet

      # from day15.t1 import meet
      # print(meet.name)
      
    • 使用绝对路径

      from sys import path

      path.insert(0,"绝对路径")

      # from sys import path
      # path.insert(0,"D:\")
      # import meet
      # print(meet.name)
      
    查找模块顺序

    内存加载 > 自定义 > 内置 > 第三方

    time模块

    time():时间戳(浮点数)

    import time
    # print(time.time())  # 时间戳 浮点数
    # print(time.time() + 5000000000)  # 时间戳 浮点数
    

    sleep(2):睡眠(秒)

    # time.sleep(3) #  睡眠         # 秒
    

    time.strftime("%Y-%m-%d %H:%M:%S")) :给人看的时间(中间的符号不能用中文)

    # print(time.strftime("%Y-%m-%d %H:%M:%S")) 
    

    gmtime():结构化时间(数据类型是命名元组时间)

    # print(time.gmtime())  # 结构化时间 数据类型是是命名元组
    # print(time.gmtime()[0])
    # print(time.gmtime().tm_year)
    

    将时间戳转换乘字符串时间

    time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime(时间戳))

    # print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime(1564028611.631374)))
    
    

    将字符串时间转换成时间戳

    time.mktime(time.strptime("2024-3-16 12:30:30","%Y-%m-%d %H:%M:%S")))

    # print(time.mktime(time.strptime("2024-3-16 12:30:30","%Y-%m-%d %H:%M:%S")))
    
    
    time重点:

    time.time() :查看当前的时间戳

    time.sleep() :睡眠

    time.gmtime() / time.localtime() :都是将时间戳转成结构化

    time.strftime("%Y-%m-%d %H:%M:%S","结构化时间") :变成字符串时间(给人看的)

    time.strptime("字符串","%Y-%m-%d %H:%M:%S") :变成结构化时间

    time.mktime(结构化时间) :变成时间戳

    datetime模块

    datetime——对象

    print(type(datetime.now()))
    # <class 'datetime.datetime'>
    
    

    datetime.now():获取当前时间

    # print(datetime.now()) # 获取当前时间
    # print(datetime(2019,5,20,15,14,00) - datetime(2019,5,20,14,20,00))
    
    

    将当前时间转化成时间戳

    # t = datetime.now()
    # print(t.timestamp())
    
    

    将时间戳转化成当前时间

    import time
    print(datetime.fromtimestamp(time.time()))
    print(datetime.fromtimestamp(1564044926.701301))
    
    

    将字符串转成对象

    print(datetime.strptime("2019-10-10 22:23:24","%Y-%m-%d %H:%M:%S")) 
    # 2019-10-10 22:23:24(对象)
    
    

    将对象转成字符串

    # print(str(datetime.now()))
    # print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    # print(datetime.strftime(datetime.now(),"%Y-%m-%d %H:%M:%S"))
    
    

    datetime加减

    # print(datetime.now() + timedelta(hours=30 * 24 * 12))
    # print(datetime.now() - timedelta(hours=30 * 24 * 12))
    
    

    random模块

    random——随机数

    random()

    print(random.random())          # 0 ~ 1里面的小数,不能是0和1
    
    

    uniform()

    print(random.uniform(1,10))     # 1 ~ 10里面的小数,不能是1和10
    
    

    randint()

    print(random.randint(1,50))     # 1 ~ 50(闭区间)
    
    

    randrange()

    print(random.randrange(1,5,2))    # randrange(起始,终止,步长)
    
    

    choice()

    print(random.choice([1,2,3,4,5])) # 选择一个元素
    
    

    choices()

    print(random.choices([1,2,3,4,5],k=2))   # 选择两个元素,会有重复
    
    

    sample()

    print(random.sample((1,2,3,4,5),k=2))  # 选择两个元素,不会有重复(除非只有两个)
    
    

    shuffle():顺序打乱

    # lst = [1,2,3,4,5,6,7,8,9,0]
    # random.shuffle(lst)  # 顺序打乱
    # print(lst)
    
    
  • 相关阅读:
    常用正则表达式
    偶得
    监控文件夹里面文件修改的小程序
    使用Windows服务发布WCF服务
    查看wcf服务中方法测试客户端
    twitter注册使用指南
    打包工具使用下载
    c#多线程编程
    请确保此文件可访问并且是一个有效的程序集或COM组件
    添加Service Reference, 无法为服务生成代码错误的解决办法
  • 原文地址:https://www.cnblogs.com/NiceSnake/p/11284919.html
Copyright © 2011-2022 走看看