2021.3.17 模块

本文详细介绍了Python中的模块和包的使用,包括导入机制、系统模块如os、time、datetime和hashlib,以及时间戳的概念和hash加密的特点。通过实例展示了如何操作文件、时间以及生成数据摘要。
摘要由CSDN通过智能技术生成

模块总结:

01 模块

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

    一个py文件就是一个模块,文件名就是模块名(如果一个模块想要被其他模块使用,模块名必须是标识符并且不是关键字。

    一个包含__ init __. py文件的文件夹就是一个包

  2. 使用其他中的内容

    一个模块可以使用另外一个模块中所有的全局变量,但是使用前需要先导入模块

    • 导入模块的语法:

      1. import 模块名 - 导入指定模块,导入后通过 ‘ 模块名.x ’ 去使用模块中所有的全局变量
      2. from 模块名 import 变量1, 变量2, 变量3,… - 导入指定模块,导入后可以直接使用import后面所有的变量
      3. import 模块名 as 新模块名 - 导入模块并且对模块进行重命名,使用数据时候采用: ‘ 新模块名 ’
      4. from 模块名 import 变量1 as 新变量1, 变量2, 变量3, …
      5. from 模块名 import * - 导入模块中所有的全局变量
    • 导入模块的原理:

      不管是通过import还是from-import, 导入模块的时候都会先进入指定模块,将模块中的代码全部执行

      选择性的让模块中的代码在被导入的时候会执行和不执行:

      if __name__ == '__main__':
          # 这个if语句外面的代码在被导入的时候会执行,里面的代码被导入的时候不会被执行
          pass
      
      
      import tools
      # print(tools.a, tools.name)
      # tools.func1()
      # print(tools.b)
      
      # from tools import a, func1
      # print(a)
      # func1()
      
      # import tools as tl
      # print(tl.a, tl.name)
      # tl.func1()
      
      # tools = 'hello'
      # import tools as Tools
      # print(Tools.a)
      # print(tools[-1])
      
      # from tools import a as t_a, name
      # a = 111
      # print(a, t_a, name)
      
      # from tools import *
      # print(a, name)
      # func1()
      
      # from random import randint
      # print(randint(0, 100))
      
      # import random
      # print(random.randint(0, 100))
      
      # import tools
      # from tools import a
      
      from download import download_movies
      
      download_movies('肖生克的救赎')
      
      
      import random
      
      
      # 编写的tools函数
      print('=============start================')
      a = 100
      
      
      def func1():
          global b
          b = 'abc'
          print('tools中的函数')
      
      # func1 = lambda x: print('tools中的函数')
      
      name = '张三'
      
      print('=============end================')
      #
      # for _ in range(100):
      #     print('++++')
      

02 包的使用

  1. 导入包中的内容

    • import 包名 - 只有在自定义完__ init __. py后才有用

    • import 包名.模块名 - 导入包中指定的模块,使用模块中的内容的格式: 包名.模块名.x

    • from 包名 import 模块名1, 模块名2,…

    • from 包名. 模块 import 变量1, 变量2,…

      注意: import 在导入模块或者包的时候,会先检查这个模块或者包之前是否已经导入过,如果已经导入过了不再重复导入

  2. __ init __ . py文件的作用

    当导入包或者包中的内容的时候,会自动执行包中的__ init __.py文件

    import files
    
    # 打开文件
    import files.commonFile
    files.commonFile.open_file()
    
    import files.commonFile as cm
    cm.open_file()
    
    from files import commonFile, jsonFile
    commonFile.open_file()
    jsonFile.read_json()
    
    from files.commonFile import open_file, close_file
    open_file()
    
    
    import files
    files.open_file()
    # 
    from files import open_file
    open_file()
    
    import files
    files.commonFile.open_file()
    
    
    import files
    files.delete_file()
    
    from files import delete_file
    delete_file()
    
    import tools
    import tools
    
    
    # commonFile
    def open_file():
        print('打开文件')
    
    
    def close_file():
        print('关闭文件')
    
    

03 系统模块

  1. 好玩儿的模块: turtle、 smtplib; email、…

  2. 工作中涉及到的模块:

      1. os模块 - 提供文件和文件夹操作的相关函数

        os.getcwdb( ) - 返回当前工作目录

        os.listdir(path) - 返回指定目录中所有的文件或者文件夹的名字

      2. time和datetime - 提供操作时间相关的函数

      3. random - 提供随机相关函数

      4. hashlib - 提供hash加密相关函数(hash摘要)

  3. random模块

import random

# 1) random.randint(m, n)  - 产生m到n的随机整数
print(random.randint(10, 20))

# 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 = [23, 34, 'abc', True]
random.shuffle(nums)
print(nums)

# 4)
# random.choice(序列)     -   从序列中随机获取一个元素
# random.choices(序列, k=N)   -   从序列中随机获取N个元素

result = random.choice('abc3lo901')
print(result)

nums = [23, 34, 'abc', 20, 3, 4]
result = random.choices(nums, k=2)
print(result)

04 时间模块

  1. time模块

    • 什么是时间戳

      时间戳: 用一个时间到1970年1月1日0时0秒(格林威治时间)的时间差来表示一个时间,单位是秒 (用时间差来表示时间)

    • 时间戳的优点:

      a. 存储时间戳比存储字符串时间消耗的内存要小很多

      b. 加密和解密更容易

    import time
    # 1) time()     -       获取当前时间(时间戳)
    t1 = time.time()
    print(t1)       # 1615966804.79146  (4字节~5字节)
                    # '2021-3-17 03:50:00'   (18字节)
    
    
    # 2)
    # time.localtime()      -       获取当前本地时间(结构体时间)
    # time.localtime(时间戳)   -       将时间戳对应的时间转换成结构体时间
    t2 = time.localtime()
    print(t2)
    
    t3 = time.localtime(0)
    print(t3)
    
    t4 = time.localtime(1615966804.79146)
    print(t4)
    print(t4.tm_year, t4.tm_mon)
    
    
    # 3)time.sleep(时间)  -   让程序睡眠指定时间,单位秒
    print('=======')
    time.sleep(1)
    print('+++++++')
    
  2. datetime - time 、datetime 、date

    from datetime import time, datetime, date, timedelta
    
    # 1) 获取当前时间
    t5 = datetime.now()
    print(t5)     # 2021-03-17 16:36:54.297076
    print(t5.year, t5.month, t5.hour)
    
    t6 = date.today()
    print(t6)       # 2021-03-17
    
    # 2) 时间的加减操作
    print('当前时间:', datetime.now())
    # 10天前:
    print('10天前:', t5 - timedelta(days=10))    # 2021-03-07 16:42:01.363135
    # 20天前
    print('20天前', t5 - timedelta(days=20))    # 2021-02-25 16:42:36.397193
    
    print('1个小时前:', t5 - timedelta(hours=1))
    print('2个小时后:', t5 + timedelta(hours=2))
    print('47个小时后:', t5 + timedelta(hours=47))
    print('2小时30分后:', t5 + timedelta(hours=2, minutes=30))
    
    t6 = t5 - timedelta(days=1, hours=1)
    print(t6, t6.year, t6.month, t6.day, t6.hour, t6.minute, t6.second)
    

05 hash摘要

  1. hash加密算法 - md5、 sha相关

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

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

      常用算法:md5、 shaX

      hash_obj = hashlib.md5()
      
    • 添加原文

      hash对象.update(需要加密的数据)

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

      hash_obj.update('123456'.encode())
      
    • 获取摘要(获取密文)

      hash对象.hexdigest( )

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值