Python 模块

模块

  1. 获取一段代码的时长

    • 导入time模块
    • time模块time获取的是UTC从197-01-01-00:00:00到现在的秒数
    import time              
    
    def count_time(fn,n):
        start_time=time.time()     #time模块time获取的是UTC从197-01-01-00:00:00到现在的秒数
        fn(n)
        end_time=time.time()
        return end_time-start_time
    def foo(n):
        s=0
        for  i in range(n):
            s+=i
        return s
    
    
    print(count_time(foo, 100000000))
    
  2. 装饰器

    • 定义和调用装饰器的格式
      • 第一步是调用函数cac_time;第二步是将demo函数赋值给fn
      • 此时的demo函数已经是cac_time内部的inner函数了
      • 当再次调用demo的时候,就相当于调用inner函数,
      • 注意**@函数的下一行一定要跟着定义一个函数**
    import time                                        #定义一个装饰器的格式
    def  cac_time(fn):                               #def 函数1(参数):
        print('cac_time函数被调用了')                       #代码操作
        def inner():                                     # def inner()
            start_time=time.time()                             #pass
            fn()                                          #return inner
            end_time=time.time()
            print(end_time - start_time)
        return inner
    @cac_time                          #第一步是调用函数cac_time;第二步是将demo函数赋值给fn
    def demo():                        #下面一定是跟着定义一个函数
        x=0
        for i in range(1,100000000):
            x+=i
        print(x)
    print('装饰后的demo函数{}'.format(demo))  #此时的demo函数已经是cac_time内部的inner函数了
    
    demo()                                  #当再次调用demo的时候,就相当于调用inner函数,
    
    • 详解

      import time
      def  cac_time(fn):
          print('cac_time函数被调用了')
          def inner(x,*args,**kwargs):              #装饰器的好处
              start_time=time.time()
              m=fn(x)
              end_time=time.time()
              print(end_time - start_time)
              return m,end_time - start_time
          return inner
      @cac_time     #第一步是调用函数cac_time;第二步是将demo函数赋值给fn
      def demo(n):
          s=0
          for i in range(1,n):
              s+=i
          return s
      print('装饰后的demo函数{}'.format(demo))  #此时的demo函数已经是cac_time内部的inner函数了
      #当再次调用demo的时候,就相当于调用inner函数,
      x=demo(100000,'hello',y='good')    #不会报错,因为此时的demo函数时inner函数
      print(x)
      
    • 装饰器可以在不修改一个函数的前提下对函数进行优化

      • #如果采用下面写法,就必须有args参数输入.可以采用缺省参数的方法,或者使用关键字,注意使用关键字时要使用get方法,不然输入的关键字找不到会报错
      def can_play(fn):
          def inner(name,game,*args,**kwargs):
              if args[0]<22:      #如果采用这种写法,就必须有args参数输入,所以可以采用缺省参
                  fn(name,game)      #数的方法,或者使用关键字,注意使用关键字的写法,要使用
              else:                   #get方法,不然输入的关键字找不到会报错
                  print('太晚了,休息吧')
          return inner
      @can_play
      def play_game(name,game):
          print('{}正在玩儿{}'.format(name,game))
      
      play_game('zhangsan','王者荣耀',18)
      play_game('lisi','吃鸡',22)
      
  3. 模块

    模块:就是一个py文件,导入一个模块就相当于将这个模块文件添加到新的py文件里

    只有满足命名规则的py文件才能称为模块

    • 导入模块的五种方式

      • **import 模块名 ** 直接导入一个模块

      • from 模块名 import 函数名 直接导入模块里的某个方法

      • from 模块名 import ** 导入模块里的"所有"**方法与变量

      • import 模块名 as 别名 ** 导入模块并起一个别名**

      • from 模块名 import 函数名 as 别名 导入函数并起一个别名

        import time   # import  模块名  直接导入一个模块
        from random import randint  #from 模块名 import 函数名  直接导入模块里的某个方法
        from math import *   #from 模块名 import *  导入模块里的"所有"方法与变量
        import datetime as dt #from 模块名 as 别名  导入模块并起一个别名
        from copy import deepcopy as dp  #from 模块名 import 函数名 as 别名  导入函数并起一个别名
        print(time.time())    #此时调用模块里的的函数,前面需要加模块名
        print(randint(0, 2))   #此时调用就不需要加模块名
        print(pi)              #调用不需要加模块名
        print(dt.time)        #调用时可以使用别名
        dp([0,1,2,3])
        
    • os模块 operator system的简称

      是对操作系统处理方法的模块

      import os
      print(os.name)             #获取操作系统的名字:windows==>nt,非windows==>posix
      print(os.sep)              #获取路径的分割符  
      print(os.getcwd())         #获取当前的工作目录
      
      os.chdir('../')            #改变工作目录:到上一层工作路径
      print(os.getcwd())
      os.chdir('F:\\between jobs/python的代码/2021.1.22')  #路径的分割用反向斜划线或者\\
      
      #os.rename('01装饰器.py', '01装饰器格式及应用')        #修改文件名
      #os.remove('xx.py')                                #删除文件
      #os.rmdir('zzz')                                    #删除一个空文件夹
      #os.mkdir()                                      #创建一个文件夹
      #print(os.listdir('C:\\'))    #获取指定目录下面的所有文件与文件夹,默认是当前文件夹
      
      #os里面的path经常用到
      #找到一个文件的绝对路径
      print(os.path.abspath('01装饰器.py'))
      
      #判断(默认是当前文件夹)是否是一个文件夹
      print(os.path.isdir('01装饰器.py'))
      print(os.path.isdir('zzz'))
      
      #判断(默认是当前文件夹)是否是一个文件
      print(os.path.isfile('01装饰器.py'))
      print(os.path.isfile('zzz'))
      
      #判断(默认是当前文件夹)是否存在该文件
      print(os.path.exists('01装饰器.py'))
      
      file_name='2021.1.25.demo.py'
      # print(file_name.rpartition('.'))  #分割成两份
      print(os.path.splitext(file_name))   #获取文件名和后缀
      
      #result
      nt
      \
      F:\between jobs\python的代码\2021.1.22
      F:\between jobs\python的代码
      F:\between jobs\python的代码\2021.1.22\01装饰器.py
      False
      False
      False
      False
      False
      ('2021.1.25.demo', '.py')
      
    • sys模块

      import sys
      print(sys.path)     #模块的路径
      #sys.stdin     功能与input类似
      #sys.stdout    改变输出的位置,默认是控制台
      #sys.sderr     改变提示错误输出的位置,默认是控制台
      sys.exit() #用法与内置函数exit类似
      
    • math模块

      import  math
      print(math.floor(12.60))  #向下取整
      print(math.ceil(13.21))   #向上取整
      print(math.factorial(6))  #求阶乘
      #round()   是内置函数表示四舍五入
      #三角函数在这个模块里,但注意要用弧度
      
    • random模块

      • 获取随机(整)数(步长)
      • 随机抽取样本
      import random
      print(random.randint(2,9))    #在[2,9]中随机抽一个整数
      print(random.randrange(2,9))  #在[2,9)中随机抽一个整数,这个可以控制步长
      print(random.random())       #在[0,1)随机抽一个数
      
      print(random.choice(['zhangsan', 'lisi', 'Jerry', 'Jack', 'Harry']))
      #在一个可迭代对象里面随机选择一个
      
      print(random.sample(['zhangsan', 'lisi', 'Jerry', 'Jack', 'Harry'], 3))
      #在一个可迭代对象里面随机选择n个
      
    • datetime模块

      import datetime as dt
      print(dt.datetime.now())   #获取当前的时间
      dt.date(2021,1,1)          #创建一个日期
      dt.time(20,17,52)          #创建一个时间
      print(dt.datetime.now() + dt.timedelta(3))  #现在时刻的三天后日期
      
    • time模块

    import time
    print(time.time())                   #获取时间戳
    time.strftime("%Y-%m-%d %H:%M:%S")   #以指定格式输出时间
    print(time.asctime())                #输入一个元组
    print(time.ctime())                  #需要输入时间戳
    print('hello')
    print(time.sleep(10))                #代码睡眠10s
    print('word')
    
    • calendar模块 :日历模块

      • 打印一年的日历,一个月的日历
      • 设置一周第一天
      • 判断闰年
      import calendar
      calendar.setfirstweekday(calendar.SUNDAY)#设置每一周的第一天是周日,周一到周日与0-6
      print(calendar.firstweekday())
      c=calendar.calendar(2021)                #获取2021的日历 print(c)
      print(calendar.isleap(2000))             #判断是否是闰年
      print(calendar.leapdays(1996, 2012))     #判断之间有几个闰年
      print(calendar.month(2021,2))            #打印2021年2月份的日历
      
    • hashlib和hmac模块:加密模块

      • hashlib支持md5加密和sha加密
      • hmac支持指定秘钥加密
      import hashlib               #这两个模块是用来加密的 支持md5加密和sha加密
      import hmac                  #支持指定秘钥加密
      x=hashlib.md5()               #使用md5加密的格式: 将加密内容(字符串)转换为二进制
      x.update('abc'.encode('utf8'))
      y=hashlib.md5('123565'.encode())
      print(x)
      print(x.hexdigest())
      print(y.hexdigest())
      #文件的md5:一般校验文件是否被篡改的方式
      #sha系列加密
      h1=hashlib.sha1('123456'.encode())
      print(h1.hexdigest())
      h2=hashlib.sha224('123456'.encode())
      print(h2.hexdigest())
      h3=hashlib.sha256('123456'.encode())
      print(h3.hexdigest())
      h4=hashlib.sha384('123456'.encode())
      print(h4.hexdigest())
      
      h=hmac.new('h'.encode(),'你好'.encode())        #使用指定秘钥加密
      print(h.hexdigest())
      #result
      <md5 HASH object @ 0x0000000002471D20>
      900150983cd24fb0d6963f7d28e17f72
      e86228f32ba83d6ff2aaa160c1f900a6
      7c4a8d09ca3762af61e59520943dc26494f8941b
      f8cdb04495ded47615258f9dc6a3f4707fd2405434fefc3cbf4ef4e6
      8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
      0a989ebc4a77b56a6e2bb7b19d995d185ce44090c13e2984b7ecc6d446d4b61ea9991b76a4c2f04b1b4d244841449454
      0c3e0484c4e8ae8613b10f471a31ced8
      
    • uuid模块

      #uuid模块,生成全局唯一的id
      import uuid
      print(uuid.uuid1())   #根据时间戳,MAC地址,随机数生成的全球唯一id
      print(uuid.uuid3(uuid.NAMESPACE_DNS,'zhangsan'))   #生成一个固定的id  基于md5
      print(uuid.uuid5(uuid.NAMESPACE_DNS,'zhangsan'))   #生成一个固定的id  基于sha
      print(uuid.uuid4())   #根据随机数产生的一个随机id
      #result
      8ca2099e-5f16-11eb-a8b0-dc85def8b534
      d51a47a6-3157-39a9-94d3-70ecb9fda86e
      8e117ce0-eb96-5ae8-84b7-621521f751b6
      38930ce0-b5d0-40e8-b381-a778aa1f45e5
      
  4. 使用pip管理第三方模块

    • 基本操作

      • pip install <package_name>用来下载第三方包模块
      • pip uninstall<package_name>用来删除第三方模块
      • pip list 列出已经安装的第三方的模块m名和版本号
      • pip freeze 列出已经安装的第三方的模块m名和版本号
      • pip freeze > file_name 将第三方模块名与版本号存到指定文件里
      • pip install -r file——name 读取指定文件里的内容并下载
      • pip install <package_name> -i 从指定路径下载第三方模块(临时修改一次)
    • 国内常见镜像服务器

      • 清华大学镜像站 https://mirror.tuna.tsinghua.edu.cn/

      • 阿里云镜像站 https://developer.aliyun.com/mirror/

      • 网易云镜像站 http://mirrors.163.com/

      • 华中科技大镜像站 http://mirror.hust.edu.cn/

      • 北京交通大学镜像站 https://mirror.bjtu.edu.cn/

      • 中国科学技术大学镜像站 https://mirror.bjtu.edu.cn/

      • 搜狐镜像站 http://mirrors.sohu.com/

      • 豆瓣:https://pypi.douban.com/simple/

  5. 使用自定义的模块

    • 自定义模块的使用

      • 模块名必须满足命名规则

      • from <模块名> import ,当该模块有时,是导入__all__=[ ,]里面的所有变量和方法;当该模块没有设置*__all__时,是默认导入所有不以一个下划线作为开头的函数和变量**,

      • 通过import <模块名>,以一个下划线开头的函数变量有时可以被调用,有时候会出错,有一种产生这种错误的原因,可能是在模块的里面将那个函数变量删除

      • 如果不想让别人用自己写的模块里的函数或者变量,可以以一个下划线开头

      • 导入模块时,会将里面的操作执行一遍:使用__name__可以不让测试结果显示

        • 如果在模块本身运行,那么就是’main’,如果是作为模块导入,那么就是文件名
        def division(x,y):
            return x/y
        
        if __name__=='__main__':
        #如果在模块本身运行,那么就是’__main__',如果是作为模块导入,那么就是文件名
            print('测试division函数,测试结果为{}'.format(division(4, 2)))
        
  6. 包的使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值