Python的模块与包
文章目录
- 一.模块
- 1.模块的样式
- 2.各个模块的介绍
- 1.OS模块
- 2.sys模块
- 3.math模块
- 4.random模块
- 5.datetime模块
- 6.time模块
- 7.calendar模块
- 8.hashlib模块和hmac模块
- 9.uuid模块
- 3.自定义模块
- 1.__all__的使用
- 2.模块中的私有成员
- 3.__name__的使用
- 二.包
- 1.导入包的方式
一.模块
模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。
注意:不是所有的py文件都是作为一个模块来导入,如果想要让一个py文件能够被导入,模块名字必须要遵守命名规则。
1.模块的样式
import 模块名
使用 import 模块名 直接导入一个模块
from 模块名 import 函数名
from 模块名 import 函数名,导入一个模块里的方法或者变量
from 模块名 import *
from 模块名 import * 导入这个模块里的"所有"方法和变量
import 模块名 as 别名
导入一个模块并给这个模块起一个别名
from 模块名 import 函数名 as 别名
from 模块名 import 函数名 as 别名
2.各个模块的介绍
1.OS模块
OS全称OperationSystem,即操作系统模块,这个模块可以用来操作系统的功能,并且实现跨平台操作。
import os
os.name # 获取操作系统的名字,Windows系列为nt,非Windows为posix
os.sep # 路径的分隔符,Windows为\,非Windows为/
os模块中的path经常会使用
os.path.abspath('xxx.txt') # abspath 获取xxx文件的绝对路径
os.path.isdir('xxx.txt') # isdir 判断是否是文件夹
os.path.isfile('xxx.txt') # isfile 判断是否是文件
os.path.exists('xxx.txt') # exists 判断是否存在
os.path.splitext('xxx.txt')# splitext 获取到文件的后缀名
os模块中其他方法介绍
os.getcwd() # 获取当前的工作目录,即当前python脚本工作的目录
os.chdir('xxx') # 改变当前脚本工作目录,相当于shell下的cd命令
os.rename('1.txt','2.txt') # 文件重命名
os.remove('xxx.txt') # 删除文件
os.rmdir('xxx') # 删除空文件夹
os.removedirs('xxx') # 删除空文件夹
os.mkdir('xxx') # 创建一个文件夹
os.chdir('C:\\') # 切换工作目录
os.listdir('C:\\') # 列出指定目录里的所有文件和文件夹
os.environ # 获取到环境配置
os.environ.get('PATH') # 获取指定的环境配置
2.sys模块
该模块提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数。
import sys
sys.path # 模块的查找路径
sys.argv # 传递给Python脚本的命令行参数列表
sys.exit(code) # 让程序以指定的退出码结束和内置函数exit功能一致
sys.stdin # 标准输入。可以通过它来获取用户的输入和input功能一致
sys.stdout # 标准输出。可以通过修改它来改变默认输出位置
sys.stderr # 错误输出。可以通过修改它来改变错误删除的默认位置
3.math模块
math模块保存了数学计算相关的方法,可以很方便的实现数学运算。
import math
math.factorial(num) #计算num的阶乘
math.pow(num1, num2) #计算num1的num2次方
math.fabs(num) #取num的绝对值
math.ceil(3.01) # 4 向上取整
math.floor(3.98) # 3 向下取整
math.pi # π的值
math.sin(math.pi / 6) # 正弦值
math.cos(math.pi / 3) # 余弦值
math.tan(math.pi / 2) # 正切值
4.random模块
random 模块主要用于生成随机数或者从一个列表里随机获取数据。
import random
random.random() # 生成 [0,1)的随机浮点数
random.uniform(a, b)) # 生成[a,b]的随机浮点数
random.randint(a,b) # 生成[a,b]的随机整数,等价于randrange(a,b+1)
random.randrange(a, b) # 生成[a,b)的随机整数
random.choice('abcdefg') # 用来在可迭代对象里随机抽取一个数据
random.sample('abcdefghij', n) #用来在可迭代对象里随机抽取 n 个数据
5.datetime模块
datetime模块主要用来显示日期时间,这里主要涉及 date类,用来显示日期;time类,用来显示时间;datetime类,用来显示日期时间;timedelta类用来计算时间。
import datetime as dt
dt.datetime.now() # 获取当前的日期时间
dt.date(2020, 3, 5) # 创建一个日期
dt.time(18, 23, 45) # 创建一个时间
dt.datetime.now() + dt.timedelta(3) # 计算三天以后的日期时间
6.time模块
除了使用datetime模块里的time类以外,Python还单独提供了另一个time模块,用来操作时间。time模块不仅可以用来显示时间,还可以控制程序,让程序暂停(使用sleep函数)。
import time
time.time() # 获取从 1970-01-01 00:00:00 UTC 到现在时间的秒数
time.strftime("%Y-%m-%d %H:%M:%S") # 按照指定格式输出时间
time.asctime() # Wed Mar 4 20:32:23 2020
time.ctime() # Wed Mar 4 20:32:23 2020
time.sleep(n) # 让线程暂停n秒钟
7.calendar模块
calendar模块用来显示一个日历。
calendar.setfirstweekday(calendar.SUNDAY) # 设置每周起始日期码。周一到周日分别对应 0 ~ 6
calendar.firstweekday()# 返回当前每周起始日期的设置。默认情况下,首次载入calendar模块时返回0,即星期一。
calendar.calendar(2020) # 生成2020年的日历,并且以周日为其实日期码
calendar.isleap(2000) # 闰年返回True,否则返回False
calendar.leapdays(1996,2020) # 获取1996年到2020年一共有多少个闰年
calendar.month(2020, 3) # 打印2020年3月的日历
8.hashlib模块和hmac模块
hashlib模块和hmac模块都是用来进行数据加密。
hashlib是一个提供字符加密功能的模块,包含MD5和SHA的加密算法,具体支持md5,sha1, sha224, sha256, sha384, sha512等算法。 该模块在用户登录认证方面应用广泛,对文本加密也很常见。
HMAC算法也是一种一种单项加密算法,并且它是基于上面各种哈希算法/散列算法的,只是它可以在运算过程中使用一个密钥来增增强安全性。hmac模块实现了HAMC算法,提供了相应的函数和方法,且与hashlib提供的api基本一致。
import hashlib
import hmac
x = hashlib.md5('y239ym23r9b!'.encode('utf8')) # 生成一个md5对象
print(x.hexdigest()) # cf0e5d09a551366618c4e532c85139fd
h1 = hashlib.sha1('123456'.encode())
print(h1.hexdigest()) # 7c4a8d09ca3762af61e59520943dc26494f8941b
h2 = hashlib.sha224('123456'.encode()) # 224位 一个十六进制占4位
print(h2.hexdigest()) #f8cdb04495ded47615258f9dc6a3f4707fd2405434fefc3cbf4ef4e6
h3 = hashlib.sha256('123456'.encode())
print(h3.hexdigest()) # 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
h4 = hashlib.sha384('123456'.encode())
print(h4.hexdigest()) #0a989ebc4a77b56a6e2bb7b19d995d185ce44090c13e2984b7ecc6d446d4b61ea9991b76a4c2f04b1b4d244841449454
# hmac 加密可以指定秘钥
h = hmac.new('h'.encode(), '你好'.encode())
result = h.hexdigest()
print(result) # 获取加密后的结果 0c3e0484c4e8ae8613b10f471a31ced8
9.uuid模块
uuid用来生成一个全局唯一的id。
import uuid
print(uuid.uuid1()) # 根据时间戳和机器码生成uuid,可以保证全球唯一
# uuid3和uuid5是使用传入的字符串根据指定的算法算出来的,是固定的
print(uuid.uuid3(uuid.NAMESPACE_DNS, 'zhangsan')) # 生成固定的uuid
print(uuid.uuid5(uuid.NAMESPACE_DNS, 'zhangsan')) # 生成固定的uuid
print(uuid.uuid4()) # 使用的最多,随机生成uuid,可能会有重复
使用命名空间和字符串生成uuid.
注意:
- 命名空间不是随意输入的字符串,它也是一个uuid类型的数据.
- 相同的命名空间和相同的字符串,生成的uuid是一样的
3.自定义模块
一个模块本质上就是一个py文件,所以自定义模块,其实就是自己写一个py文件。
值得注意的是,如果一个py文件想要当做一个模块被导入,文件名一定要遵守命名规范(由数字、字母下划线组成,不能以数字开头)并且自定义模块名不要和系统的模块名重名。
1.__all__的使用
使用from <模块名> import *导入一个模块里所有的变量和函数时,其本质上是去读取这个模块的__all__属性,看这个属性里定义了哪些变量和函数,将__all__属性里声明的所有内容导入。如果这个模块里没有定义__all__属性,此时才会导入这个模块里的所有内容。
在test1.py文件中:
a = 'hello world'
def test1():print('我是test1模块里的test1函数')
在test2.py文件中:
x = 'hello'
y = 'world'
def test2():print('我是test2模块里的test函数')
__all__ = ('x','test2')
在action.py文件中:
from test1 import *
from test2 import *print(a) # hello world
test1() # 我是test1模块里的test1函数
print(x) # hello
#print(y) # 会报错,test2的__all__里没有变量 y
test2() # 我是test2模块里的test函数
2.模块中的私有成员
模块里以一个下划线_开始的变量和函数,是模块里的私有成员,当模块被导入时,以_开头的变量默认不会被导入。但是它不具有强制性,如果一个代码强行使用以_开头的变量,有时也可以。但是强烈不建议这样使用,因为有可能会出问题。
在test3.py文件中:
m = '早上好'
_n = '下午好'
def _test3():print('我是test3里的test3函数')
在action.py文件中:
#from test3 import *
#print(_n) 会报错,导入test3时, _n 不会被导入
import test3
print(test3._n) #下午好
test3._test3() #我是test3里的test3函数
3.__name__的使用
python在执行一个文件时有个变量__name__.在Python中,当直接运行一个py文件时,这个py文件里的__name__值是__main__,如果这个py文件作为一个模块导入的时候,值是文件名。据此可以判断一个一个py文件是被直接执行还是以模块的形式被导入。
在test1.py文件中:
def add(a,b):return a+b
if __name__ == '__main__':
# 只有直接执行这个py文件时,__name__的值才是 __main__
# 以下代码只有直接运行这个文件才会执行,如果是文件被别的代码导入,下面的代码不会执行print('test1里的name是:', __name__)ret = add(12,22)print('测试的结果是',ret)
运行结果:
test1里的name是: __ main__
测试的结果是 34
在action.py文件中:
import test1
result=test1.add(10,10)
print(result)
运行结果:
20
二.包
可以将多个具有相似或者有关联的多个模块放到一个文件夹里,便于统一管理,这个文件夹,我们就可以称之为包。
1.导入包的方式
假设现在有chat包,包里有两个模块分别是send_msg.py、recv_msg.py文件,在test文件中导入chat的两个模块。
在send_msg.py文件中:
x = '我是send_msg里的变量x'
在recv_msg.py文件中:
y = '我是recv_msg里的变量y'
在chat包里创建了一个__init__.py文件:
# 导入指定的模块 . 代表的是当前文件夹
from . import send_msg
from . import recv_msg
在test.py文件中:
from chat import recv_msg #使用from xxx import xxx 方式导入指定模块。
from chat.send_msg import x
print(x)
print(recv_msg.y)
或者:
import chat # 导入时,只需要输入包名即可。在包名的__init__.py文件里,导入了指定模块
print(chat.send_msg.x)
print(chat.recv_msg.y)
运行结果:
我是send_msg里的变量x
我是recv_msg里的变量y
Python的模块与包相关推荐
- python基础---模块与包
1.模块导入方法 常见的场景: 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀,导入模块可以实现功能的重复利用 import加载的模块分为四个通用类别: 1 使 ...
- Python中 模块、包、库
模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...
- Python 之 模块和包
模块和包 目标 模块 包 发布模块 模块 1.1 模块的概念 模块是 Python 程序架构的一个核心概念 每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块 模块名 同样也是一个 ...
- Python 基金会 —— 模块和包简介
一.模块(Module) 1.模块的作用 在交互模式下输出的变量和函数定义,一旦终端重新启动后,这些定义就都不存在了,为了持久保存这些变量.函数等的定义,Python中引入了模块(Modul ...
- 25 Python之模块与包
一.模块 模块就是一个包含了python定义和申明的文件,文件名就是模块的名字加上.py的后缀/ 模块的分类: 1.使用python编写的py文件 2.已被编译位共享库或者DLL或C或者C++的扩展 ...
- python 必备模块和包_量化金融分析师(AQF)|这45道Python面试题都对你非常有帮助!(二)...
量化金融分析师(AQF)|这45道Python面试题都对你非常有帮助!(二) 21)如何在Python中复制对象? 要在Python中复制对象,可以尝试copy.copy()或copy.deepcop ...
- Python基础——模块和包详解以及pip操作模块和包的指令
随着项目越来越大,所有代码都放在一个文件中,已经不能满足我们的需求了.这时候就要将代码进行整理了,模块和包的出现就是为了解决这个问题的.模块可以将一些相关联的代码组合在一个py文件中,包可以将一些相关 ...
- Python之模块,包,文件,异常
目录 前言 模块 模块,包导入 文件 异常 高阶函数 后记 前言 在我们之前的学习中,做测试是不会有第二个py文件的,那么就不太了解一个py文件是代表着什么,是否跟java编程中的.java文件有什么 ...
- python规范模块和包
主要内容: 1.模块 2.包 1.模块 模块分为三种: 1)内置模块 2)扩展模块 3)自定义模块 3)自定义模块 模块的创建 导入 模块名 创建: 1. 注意 模块名 需要符合变量命名规范 2. ...
- 深入理解并使用python的模块与包
模块 编写好的一个python文件可以有两种用途: 1)脚本,一个文件就是整个程序,用来被执行 2)模块,文件中存放着一堆功能,用来被导入使用 模块的分类 1)开发者编写的 .py文件 2 ) 由C或 ...
最新文章
- Linux那些事儿 之 戏说USB(30)驱动的生命线(二)
- post提交的数据几种编码格式
- 状态压缩 HDU 1565
- 数据库文档生成数据库脚本工具
- Goldengate DDL复制相关注意事项
- 我所理解的设计模式(C++实现)——策略模式(Strategy Pattern)
- FFMPEG分析比较细的文章
- jvm需要多长时间进行转义分析? 可能比您想象的要长。
- Apache与Tomcat 区别与联系
- append从一个添加到另一_小米的另一妙用,制作小米锅巴,吃着嘎嘣脆,一口一个香得很...
- 3529: [Sdoi2014]数表 - BZOJ
- Erlang 之父 Joe Armstrong 逝世,享年 68 岁
- 莫烦---Tensorflow学习
- 爬虫免费Charles使用教程
- 阿里云服务器搭建过程(小白起步)
- 绘制地形图(测量篇2——实测数据导入CAD)-龙啸
- 光纤收发器双模和单模有什么区别?如何区分单模、双模光纤收发器?
- HC32L072 ADC 性能测试
- CCM色彩调试黄色块饱和度不够
- mmdetection里进行特征图可视化
热门文章
- 【五校联考2day1】补给站
- 码农必备?清华大学开源了一款写代码神器。。。
- window下载远程压缩包(Dos命令下载三行命令)
- android虚拟手机云之一:总述
- NetCore之下载文件
- Unity宏 + RSP文件定义宏
- 如何从Windows连接PacketiX ×××
- matlab ‘MarkerSize‘ ,x 转换成mm
- Uncaught PHPExcel_Exception: Maximum 31 characters allowed in sheet title
- 机器视觉、目标检测常见应用场景