九、模块和包

学习目标

  • 能够说出模块和包的概念
  • 能够使用不同的语句导入模块和包
  • 能够使用标准库实现功能
    • os模块
    • sys模块
    • time模块
    • hashlib模块等
  • 能够使用pip安装第三方模块
  • 能够使用pip命令管理Python安装包
  • 能够修改pip的安装源
  • 能够自定义模块

一、导入模块的语法

  • 模块: 在Python里一个py文件,就可以理解为模块。但不是所有的py文件能够作为一个模块来导入。如果想要让一个py文件能够被导入,模块名字必须要遵守 命名规则
# Python为了方便开发,提供了很多内置模块
import time # 1. 使用 import 模块名直接导入一个模块
from random import randint # 2. from 模块名 import 函数名,导入一个模块里的指定的方法或者变量
from math import * # 3. from 模块名 import * 导入这个模块里的所有方法和变量
import datetime as dt # 4. import 模块名 as 别名 导入一个模块并给这个模块起一个别名
from copy import deepcopy as dp # 5. from 模块名 import 函数名 as 别名

# 导入这个模块以后,就可以使用这个模块里的方法和变量
print(time.time())
randint(0,2) # 生成 [0,2] 的随机整数
print(pi) # 圆周率

二、常见的内置模块

2.1 os模块

# os 全称 OperationSystem 操作系统
# os 模块里提供的方法就是用来调用操作系统里的方法
import os

# os.name ==> 获取操作系统的名字  windows系列 ==> nt / 非windows ==> posix
print(os.name) # nt

# os.sep获取路径的分割符 windows ==> \  windows ==> /
print(os.sep) # \ 

# os.path会经常被使用
# abspath: 获取文件的绝对路径
print(os.path.abspath('...'))

# isdir: 判断是否是文件夹
print(os.path.isdir('...'))

# isfile: 判断是否是文件
print(os.path.isfile('...'))

# exists: 判断路径是否存在
print(os.path.exists('...'))

# join: 按照系统路径拼接路径字符串
print(os.path.join('...','...'))

# os 里其他方法的介绍
os.getcwd() # 获取当前的工作目录,即当前pytohn脚本工作的目录
os.chdir('test') # 改变当前脚本工作目录,相当于shell下的cd命令
os.rename('毕业论文.txt','毕业论文-最终版.txt') # 文件重命名
os.remove('毕业论文.txt') # 删除文件
os.rmdir('demo') # 删除空文件夹
os.removedir('demo') # 删除空文件夹
os.mkdir('demo') # 创建一个文件夹
os.chdir('c:\\') # 切换工作目录
os.listdir('c:\\') # 列出指定目录下的所有文件和文件夹
os.name # nt -> windows posix -> Linux/Unix或者MacOS
os.environ # 获取到环境配置
os.environ.get('PATH') # 获取指定的环境配置

2.2 sys模块

# sys系统相关的功能
import sys
# exit: 程序退出,和内置函数 exit 功能一致
sys.exit()

# path: 结果是一个列表,表示python解释器查找模块的所有路径
print(sys.path)

sys.stdin # 可以像 input 一样,接受用户的输入
sys.stdout # 修改 sys.stdout 可以改变默认输出位置
sys.stderr # 修改 sys.stderr 可以改变错误输出的默认位置

2.3 math模块

# 数学计算相关的模块
import math
print(math.factorial())

# 幂运算
print(math.pow(2,10))

# 向下取整
print(math.floor(12.98))

# 向上取整
print(math.ceil(15.0001))

# round() 内置函数,实现四舍五入

2.4 random模块

# random模块用来生成一个随机数

# randint(a, b) 用来生成 [a, b]的随机整数    等价于    randrange(a,b+1)
print(random.randint(1,10)) # 生成[1, 10]的随机整数

# randrange(a, b) 用来生成 [a, b)的随机整数
print(random.randrange(1,10)) # 生成[1, 10)的随机整数

# random() 用来生成 [0,1) 的随机浮点数
print(random.random())

# choice 用来在可迭代对象里随机抽取一个数据
print(random.choice(['zhangsan','lisi','jack','jerry']))

# sample 用来在可迭代对象里随机抽取 n 个数据
print(random.sample(['zhangsan','lisi','jack','jerry'],2))

2.5 datetime模块

import datetime as dt

# 以一个下划线 _ 开始 ==> _x
# 以两个下划线 __ 开始 ==> __x
# 以两个下划线开始,再以两个下划线结束 __x__

# 涉及到四个 datetime/date/time/timedelta
print(dt.datetime.now()) # 获取当前的日期时间
print(dt.date(2020, 1, 1)) # 创建一个日期
print(dt.time(18,23,45)) # 创建一个时间
print(dt.datetime.now() + dt.timedelta(3)) # 计算三天以后的日期时间

2.6 time模块

# 除了使用datetime模块里的time类以外,Python还单独提供了另一个time模块,用来操作时间。time模块不仅可以显示时间,还可以控制程序,让程序停止(使用sleep函数)
import time

print(time.time()) # 获取从 1970-01-01 00:00:00 UTC 到现在时间的秒数
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 按照指定格式输出时间
print(time.asctime()) # Mon Apr 15 20:03:23 2019
print(time.ctime()) # Mon Apr 15 20:03:23 2019

print(time.sleep(10)) # 让线程暂停10秒

2.7 calendar模块

import calendar # 日历模块
c = calendar.calendar(2019) # 生成 2019 年的日历,并且以周日为实际日期码
print(c) # 打印2019年日历

calendar.setfirstweekday(calendar.SUNDAY) # 设置每周起始日期码。周一到周日分别对应 0 ~ 6
print(calendar.firstweekday()) # 返回当前每周起始七日的设置。默认情况下,首次载入calendar模块时返回0,即星期一

print(calender.isleap(1900)) # True. 闰年返回True,否则返回False
count = calendar.leapdays(1996,2010) # 获取1996年到2010年一共有多少个闰年
print(count)

calendar.month(2020,3) # 打印2019年3月的日历

2.8 hashlib和hmac模块

import hashlib
import hmac

# 这两个模块都是用来进行数据加密
# hashlib模块里只要支持两个算法 md5 和 sha 加密
# 加密方式:
# 1. 单向加密: 只有加密的过程,不能解密md5/sha
# 2. 对称加密

x = hashlib.md5() # 生成一个md5对象
x.update('abc'.encode('utf-8')) # 需将加密的内容转换成为二进制
# 或者x = hashlib.md5('abc'.encode('utf-8'))

print(x.hexdigest()) # abc加密后的内容,并且是唯一对应的

# 另外一种加密方式
x = hashlib.sha1('abc'.encode('utf-8'))
x = hashlib.sha224('abc'.encode('utf-8'))
print(x.hexdigest()) # abc加密后的内容,并且是唯一对应的


# 使用hmac的加密方式,hmac 加密可以指定秘钥
h = hmac.new('h'.encode(),'你好'.encode())
result = h.hexdigest()
print(result) # 获取加密后的结果

2.9 uuid模块

  • UUID是128位的全局唯一识别符,通常由32字节的字符串便是,它可以保证时间和空间的唯一性,也称为GUID。通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生产的ID的唯一性。随机生产字符串,可以当成token使用,当成用户账户使用,当成订单号使用
# uuid 用来生成一个全局唯一标识码的模块
import uuid
print(uuid.uuid1()) # 32 个长度  每一个字符有16个选择
方法作用
uuid.uuid1()基于MAC地址,时间戳i,随机数来生成唯一的uuid,可以保证全球范围内的唯一性
uuid.uuid2()算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。不过需要注意的是python中没有基于DCE的算法,所以python的uuid模块中没有uuid2()这个方法
uuid.uuid3(namespace,name)通过计算一个命名空间he米子的md5散列值来给出一个uuid,所以可以保证命名空间中的不同名字具有不同的uuid。namespace并不是一个自己手动指定的字符串或其他量,而是在uuid模块中本身给出的一些值。比如 uuid.NAMESPACE_DNS, uuid.NAMESPACE_OID这些值。这些值本身也是UUID对象,根据一定的规则计算得出
uuid.uuid4()通过伪随机数得到uuid,是有一定概率重复的
uuid.uuid5(namespace,name)和uuid基本相同,只不过采用的散列算法是sha1

三、pip包管理工具

# 下载指定的第三方模块
pip install 模块名
# 安装指定环境文件内的模块
pip install -r requirement.txt
# 从指定的地址下载包
pip install <package_name> -i <url>

# 卸载指定的第三方模块
pip uninstall 模块名

# 用来列出当前环境安装了哪些模块
pip list

# 用来列出当前环境安装的模块名和版本号
# > 重定向,将环境内容写入到 requirement.txt 里
pip freeze > requirement.txt

四、自定义模块

# 一个模块本质上就是一个 py 文件
# 自己定义一个模块,其实就是自己写一个 py 文件
# 如果一个py文件想要当做一个模块被导入,文件名一定要遵守命名规范(数字、字母、下划线)

# 导入了一个模块,就能使用这个模块里变量和函数
import my_module

# 使用 from <module_name> import * 导入这个模块里 "所有" 的变量和函数
# 本质就是读取模块里的 __all__ 属性,看这个属性里定义了哪些变量和函数
__all__ = ['m', 'test']
# 如果模块里没用定义 __all__ 才会导入所有不以 _开头的变量和函数 (以一个下划线开始的变量,建议只在本模块里使用,别的模块不要导入)

# __name__: 当直接运行这个py文件的时候,值是 __main__
# 如果这个py文件作为一个模块导入的时候,值是文件名
# 若想设置仅能在当前文件内运行的代码时,使用
if __name__ == '__main__':
    pass

五、包

  • python中将 多个相关功能的模块(py文件)放置于同一个文件夹下,并且该文件夹里存在 __init__.py文件,则该文件夹称之为 python包
  • 可以使用 from 包名 import 模块名 的形式导入包里的模块

https://zhuanlan.zhihu.com/p/335347908 ---- Python核心知识系列:Python工程组织结构

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ModelBulider

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值