模块和包 及hash加密

本文介绍了Python中的模块和包的概念及使用方式,并详细讲解了os、random和时间相关的模块如time与datetime的功能与应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块和包 及hash加密算法

  1. 模块和包的使用

    1. 什么是模块,什么是包

      • 模块 : 一个py文件就是一个模块,文件名就是模块名(如果一个模块想要被其他模块使用,模块名必须是标识符并且不是关键字)
      • 包 : 一个包含__init__.py文件的文件夹就是一个包
    2. 模块的使用

      """
      import 模块名      -      导入指定模块,导入后通过'模块名.x'去使用模块中所有的全局变量
      from 模块名 import 变量1, 变量2, 变量3, ...  - 导入指定模块,导入后可以直接使用import后面所有的变量
      import 模块名 as 新模块名    -    导入模块并且对模块进行重命名,使用数据时候采用:'新模块名.'
      from 模块名 import 变量1 as 新变量1, 变量2, 变量3, ...
      from 模块名 import *   -   导入模块中所有的全局变量
      
      导入模块的原理:
      不管是通过import还是from-import,导入模块的时候都会先进入指定模块,将模块中的代码全部执行
      
      选择性的让模块中的代码在被导入的时候执行和不执行:
      if __name__ == '__main__':
          # 这个if语句外面的代码在被导入的时候会执行,里面的代码被导入的时候不会被执行
          pass
      """
      
      # 假设同目录下有tools这个.py结尾的模块,其中有add_num这个函数和 a = 100的全局变量,在当前的文件要使用其中的变量或者函数,需要import tools
      
      import tools 或者 from tools import a,add_num   #这样才能在当前文件使用tools中的全局变量和函数  其他同理
      
    3. 包的使用

      # 1.导入包中的内容
      """
      import 包名   -  只有在自定义完__init__.py后才有用
      import 包名.模块名   -   导入包中指定的模块, 使用模块中的内容的格式: 包名.模块名.x
      
      from 包名 import 模块名1, 模块名2, ...
      from 包名.模块 import 变量1, 变量2,...
      
      注意:import在导入模块或者包的时候,会先检查这个模块或者包之前是否已经导入过,如果已经导入过了不再重复导入
      """
      
      # 2. __init__.py文件的作用
      # 当导入包或者包中的内容的时候,会自动执行包中的__init__.py文件
      
  2. 模块

    1. 系统模块

      • 好玩的模块::turtle(绘画) ; smtplib ; email(邮件)
      • 工作涉及到的模块(暂时)
        1. os模块 - - - - 提供文件和文件夹操作的相关函数

          1. os.getcwdu() – 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹)
          2. os.listdir(path) — 返回指定目录中所有的文件或者文件夹的姓名
          3. os.chdir(path) - - - 改变当前工作目录
        2. random模块

          1. random.randint(m, n) — 随机产生指定范围的整数(包括m,n)

            print(random.randint(10, 20))
            # 10
            
          2. random.random() ---- 产生0~1的随机小数

            print(random.random())   #0-1的小数
            print(random.random()*100)   #0-100的小数
            print(random.random()*50 + 50)  #50-100的小数
            print(random.random()*5 + 15)   # 15-20的小数
            
          3. random.shuffle(列表) ---- 将列表中元素的顺序随机打乱(洗牌)

            nums = [10, 65, 'raf', 895]
            random.shuffle(nums)
            print(nums) # ['raf', 65, 10, 895]
            
          4. random.choice(序列) - 从序列中随机获取一个元素

            nums = [10, 65, 'raf', 895]
            result = random.choice(nums)
            print(result)
            # 65
            
          5. random.choices(序列, k=N) - 从序列中随机获取N个元素

            nums = [10, 65, 'raf', 895]
            result = random.choices(nums, k=2)
            print(result)
            # [10, 895]
            
    2. 时间模块

      1. time模块(注意 : 需要引入 import time)

        1. time — 获取当前时间(时间戳)

          import time
          
          result = time.time()
          print(result) # 1615966827.1316657
          
        2. time.localtime() — 获取当前本地时间(结构体时间)

          import time
          
          t4 = time.localtime(1615966804.79146)
          print(t4)
          # time.struct_time(tm_year=2021, tm_mon=3, tm_mday=17, tm_hour=15, tm_min=40, tm_sec=4, tm_wday=2, tm_yday=76, tm_isdst=0)
          
          print(t4.tm_year, t4.tm_mon)
          #2021 3
          
        3. time.sleep(时间) — 让程序睡眠指定的时间,单位秒

          import time
          
          print('=======')
          time.sleep(1)
          print('+++++++')
          
          '''
          =======
          #会停顿1秒再打印下面
          +++++++
          '''
          
      2. datetime模块 - timedatetimedate

        (注意 : 要引入from datetime import time, datetime, date, timedelta)

        1. datetime.now() — 获取当前时间

          from datetime import time, datetime
          
          t5 = datetime.now()
          print(t5)     # 2021-03-17 16:36:54.297076
          print(t5.year, t5.month, t5.hour)  #2021 3 20
          
          t6 = date.today()
          print(t6)       # 2021-03-17
          
        2. date.today() – - 获取今天的(年-月-日)

          from datetime import date
          
          t6 = date.today()
          print(t6)       # 2021-03-17
          
        3. timedelta(days=10) - - - 时间的加减(days=10 相当于10天)

          from datetime import time, datetime,date
          
          print('当前时间:', datetime.now())
          #当前时间: 2021-03-17 20:36:43.812073
          
          # 10天前:
          print('10天前:', t5 - timedelta(days=10))    
          # 10天前: 2021-03-07 20:36:43.812073
          
          # 20天前
          print('20天前', t5 - timedelta(days=20))    
          # 20天前 2021-02-25 20:36:43.812073
          
          print('1个小时前:', t5 - timedelta(hours=1))
          # 1个小时前: 2021-03-17 19:36:43.812073
          
          print('2个小时后:', t5 + timedelta(hours=2))
          # 2个小时后: 2021-03-17 22:36:43.812073
          
          print('47个小时后:', t5 + timedelta(hours=47))
          # 47个小时后: 2021-03-19 19:36:43.812073
          
          print('2小时30分后:', t5 + timedelta(hours=2, minutes=30))
          # 2小时30分后: 2021-03-17 23:06:43.812073
          
          t6 = t5 - timedelta(days=1, hours=1)
          print(t6, t6.year, t6.month, t6.day, t6.hour, t6.minute, t6.second)
          # 2021-03-16 19:36:43.812073 2021 3 16 19 36 43
          
    3. hash加密

      注意 : 需要引入 import hashlib

      1. hash加密算法 – md5(不可逆) sha相关

        """
        hash加密的特点:
        a. 不可逆:无法通过hash算法加密得到密文获取到原数据
        b. 相同的数据通过相同的算法得到摘要(密文)是一样的
        c. 不同长度是数据通过相同的算法得到的摘要(密文)的长度一样
        """
        
      2. 生成数据摘要(加密)

        1. 根据算法创建hash对象: hashlib.算法名()

          # 常用算法:md5、shaX
          hash_obj = hashlib.md5()
          
        2. 添加原文 : hash.对象update(需要加密的数据)

          注意:加密数据的类型必须bytes(相当于python中二进制数据)

          hash_obj.update('123456'.encode())
          
                   
    
  3. 获取摘要(获取密文) : hash对象.hexdigest()

                   result = hash_obj.hexdigest()
                   print(result)    # e10adc3949ba59abbe56e057f20f883e
                   ```
                
    
                
                   
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值