• 自定义模块,time,datetime以及random


    自定义模块,time,datetime以及random

    1.自定义模块

    自定义一个模块
    import          #导入  (拿工具箱)
    
    模块分类
    1.内置模块(标准库)  --python解释器自带的.py文件(模块)
    2.第三方模块(大神写的)  --需要额外下载的(www.pypi.org)
    3.自定义模块(自己写的)   --不需要额外下载
    
    分模块的好处:
        1.避免写重复代码
        2.可以多次利用
        3.拿来主义(拿来就用)
        
    导入发生的事情:
        1.在当前的名称空间开辟一个新的空间
        2.将模块中所有的代码执行
        3.通过模块名,进行查找函数(工具)
        
    例:
    test.py:
        print("这是一个test")
        
        def func():
            print("is func")
            return "hello"
        def foo():
            print("is foo")
     	name = "bye"
        
    导入test.py
    import test
    print(test.name)
    print(test.func())
    
    import test as t      #起别名
    print(t.name)
    
    起别名:
        1.可以将很长的模块名改成很短,方便使用
        2.有利于代码的拓展和优化
     
    test.py                        meet.py
    def func():                    def func():
        print("扳手")                   print("螺丝刀")
    
    msg= '''1.扳手 2.螺丝刀 >>>'''
    
    提高兼容性:
    choose = input(msg)
    if choose == "1":
        import test as t:
    if choose == "2":
        import meet as t:
    t.func()
        
     
    
    from test import func
    func()
    
    import 和 from...import的区别
    1.import
    缺点:占用内存较大
    优点:不会和当前文件定义的变量或者函数发生冲突
        #import test
         name = "宝元"
         print(test.name)
         print(name)
            
    2.from..import
    缺点:会和当前文件定义的变量或者函数发生冲突
        name = "宝元"
        from test import name
        print(name)    #会覆盖本文件中定义的变量
        
        解决办法:
            name = "宝元"
            from test import name as n
            print(name)
            print(n)
    优点:占用内存比较小
        
    from test import *   #导入整个模块,会出现覆盖的现象,不能解决
                         #飘红不一定是报错
    #可以在被导入的模块中顶部加入 __all__ = ["可以被导入的函数名和变量名"]
    
    
    模块导入时的坑:被导入模块中导入模块,最后形成死环
    
        
    模块的两种用法:
        1.脚本(在cmd中执行 python test.py)
        2.模块(不使用或者导入)
        
    from test import *
    if __name__ == '__main__':      #测试接口
        func()
        
    在当前模块中使用__name__就是'__main__',if下面的代码会执行
    当模块被导入的时候__name__就是被导入的模块名,if下面的代码不会执行
    
    导入路径:
    1.使用相对路径:
    from day15.t1(文件路径名) import meet
    print(meet.name)
    
    2.使用绝对路径:
    from sys import path
    path.insert(0,"D:\")
    import meet
    print(meet.name)
    导入路径优先级:自定义>内置>第三方
    

    2.time

    time --时间模块
    时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的
    
    1.时间戳
    import time
    print(time.time())       #时间戳 浮点数
    print(time.time() + 500000)     #时间戳加法   浮点数
    time.sleep(3)            #睡眠  秒
    
    #时间戳表示的是格林尼治时间是从1970年1月1日00:00:00开始按秒计算的偏移量
    
    2.格式化字符串时间
    import time
    print(time.strftime("%Y-%m-%d %H:%M:%S")) 
                       #2019-07-25 16:22:43
    3.结构化时间
    结构化时间:元组(struct_time) struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
    import time
    print(time.gmtime())     / time.localtime()
    #time.struct_time(tm_year=2019, tm_mon=7, tm_mday=25, tm_hour=8, tm_min=25, tm_sec=5, tm_wday=3, tm_yday=206, tm_isdst=0)
    print(time.gmtime()[0])       #2019
    print(time.gmtime().tm_year)  #2019                                              
    将时间戳转换成字符串时间
    print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime(1564043412.2928293)))
    #2019-07-25 08:30:12
                                                    
    将字符串串时间转换成时间戳
    print(time.mktime(time.strptime("2019-7-25 08:30:12","%Y-%m-%d %H:%M:%S")))   
    #1564014612.0                                                
                          
    

    3.datetime

    from datetime import datetime,timedelta
    
    datetime  --类型:对象(<class 'datetime.datetime'>)
    
    #获取当前时间
    print(datetime.now())   
    #2019-07-25 16:36:57.212376
    
    #时间相减
    print(datetime(2020,5,20,13,14,00) - datetime(2019,5,20,13,14,00))
    #366 days, 0:00:00
    
    #将当前时间转化成时间戳
    t = datetime.now()
    print(t.timestamp())   #1564044145.39519
    
    #将时间戳转化成当前时间
    import time
    print(datetime.fromtimestamp(1564044145.39519))
    #2019-07-25 16:42:25.395190
    
    #将字符串转成对象
    print(datetime.strptime("2019-07-25 16:42:25","%Y-%m-%d %H:%M:%S"))   
    #2019-07-25 16:42:25
    
    #将对象转换成字符串
    1.print(str(datetime.now()))
      #2019-07-25 16:47:01.294579
    2.print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
      #2019-07-25 16:47:01
    
    #datetime加减
    print(datetime.now() + timedelta(hours = 30 * 24 * 12))
    #2020-07-19 16:49:06.174903
    print(datetime.now() - timedelta(hours = 30 * 24 * 12))
    #2018-07-30 16:49:33.403164
    print(datetime.now() + timedelta(days = 1))
    #2019-07-26 16:51:39.331657
    print(datetime.now() - timedelta(days = 1))
    #2019-07-24 16:52:26.509917
    

    4.random

    import random
    随机小数
    print(random.random())    #大于0且小于1的小数
    print(random.uniform(1,3)) #大于1且小于3的小数
    
    随机整数
    print(random.randint(1,5)) #大于等于1且小于等于5之间的整数
    print(random.randrange(1,10,2)) # 大于等于1且小于10之间的奇数
                                    #randrange(起始,终止,步长)
    随机选择一个返回
    print(random.choice([1,'23',[4,5]]))
    随机选择多个返回,会有重复
    print(random.choices([1,2,3,4,5,],k=2))   
    
    随机选择多个返回,不会出现重复,除非元素重复
    print(random.sample([1,'23',[4,5]],k = 2))
    
    打乱列表顺序
    lst = [1,2,3,4,5,6,7,8,9]
    random.shuffle(lst)
    print(lst)
    # [9, 8, 5, 3, 4, 1, 6, 7, 2]
    
    
    

    5.其他

    python中时间日期格式化符号: 
    %y 两位数的年份表示(00-99) 
    %Y 四位数的年份表示(000-9999) 
    %m 月份(01-12) 
    %d 月内中的一天(0-31) 
    %H 24小时制小时数(0-23) 
    %I 12小时制小时数(01-12) 
    %M 分钟数(00=59) 
    %S 秒(00-59) 
    %a 本地简化星期名称 
    %A 本地完整星期名称 
    %b 本地简化的月份名称 
    %B 本地完整的月份名称 
    %c 本地相应的日期表示和时间表示 
    %j 年内的一天(001-366) 
    %p 本地A.M.或P.M.的等价符 
    %U 一年中的星期数(00-53)星期天为星期的开始 
    %w 星期(0-6),星期天为星期的开始 
    %W 一年中的星期数(00-53)星期一为星期的开始 
    %x 本地相应的日期表示 
    %X 本地相应的时间表示 
    %Z 当前时区的名称 
    %% %号本身
    
  • 相关阅读:
    Git标签
    Git管理修改和撤销修改
    Git删除文件
    Git解决冲突
    Git的stash功能
    Git管理分支
    Git的多人协作模式
    Git相关指令
    LC7 整数翻转 + LC9 回文数
    LC1 两数之和
  • 原文地址:https://www.cnblogs.com/tutougold/p/11246455.html
Copyright © 2020-2023  润新知