文章目录

  • 一.模块
    • 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.
注意:

  1. 命名空间不是随意输入的字符串,它也是一个uuid类型的数据.
  2. 相同的命名空间和相同的字符串,生成的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的模块与包相关推荐

  1. python基础---模块与包

    1.模块导入方法 常见的场景: 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀,导入模块可以实现功能的重复利用 import加载的模块分为四个通用类别: 1 使 ...

  2. Python中 模块、包、库

    模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...

  3. Python 之 模块和包

    模块和包 目标 模块 包 发布模块 模块 1.1 模块的概念 模块是 Python 程序架构的一个核心概念 每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块 模块名 同样也是一个 ...

  4. Python 基金会 —— 模块和包简介

    一.模块(Module) 1.模块的作用      在交互模式下输出的变量和函数定义,一旦终端重新启动后,这些定义就都不存在了,为了持久保存这些变量.函数等的定义,Python中引入了模块(Modul ...

  5. 25 Python之模块与包

    一.模块 模块就是一个包含了python定义和申明的文件,文件名就是模块的名字加上.py的后缀/ 模块的分类: 1.使用python编写的py文件 2.已被编译位共享库或者DLL或C或者C++的扩展 ...

  6. python 必备模块和包_量化金融分析师(AQF)|这45道Python面试题都对你非常有帮助!(二)...

    量化金融分析师(AQF)|这45道Python面试题都对你非常有帮助!(二) 21)如何在Python中复制对象? 要在Python中复制对象,可以尝试copy.copy()或copy.deepcop ...

  7. Python基础——模块和包详解以及pip操作模块和包的指令

    随着项目越来越大,所有代码都放在一个文件中,已经不能满足我们的需求了.这时候就要将代码进行整理了,模块和包的出现就是为了解决这个问题的.模块可以将一些相关联的代码组合在一个py文件中,包可以将一些相关 ...

  8. Python之模块,包,文件,异常

    目录 前言 模块 模块,包导入 文件 异常 高阶函数 后记 前言 在我们之前的学习中,做测试是不会有第二个py文件的,那么就不太了解一个py文件是代表着什么,是否跟java编程中的.java文件有什么 ...

  9. python规范模块和包

    主要内容: 1.模块 2.包 1.模块 模块分为三种: 1)内置模块 2)扩展模块 3)自定义模块 3)自定义模块 模块的创建 导入 模块名 创建: 1.  注意 模块名 需要符合变量命名规范 2.  ...

  10. 深入理解并使用python的模块与包

    模块 编写好的一个python文件可以有两种用途: 1)脚本,一个文件就是整个程序,用来被执行 2)模块,文件中存放着一堆功能,用来被导入使用 模块的分类 1)开发者编写的 .py文件 2 ) 由C或 ...

最新文章

  1. 05JavaScript中的流程控制
  2. SRIO学习(六)——Direct I/O 操作(一)
  3. android imagebutton 按下效果,Android 点击ImageButton时有“按下”的效果的实现
  4. 哪种网络访问控制方法最适合?
  5. 【opencv系列03】OpenCV4.X视频捕获与显示
  6. linux编译ace tao,CentOS环境下ACE编译指南
  7. 什么鬼,面试官竟然让我用Redis实现一个消息队列!!?
  8. leetcode —— 1004. 最大连续1的个数 III
  9. 别在我的坟前哭 脏了我轮回的路
  10. bootstrap兼容ie8以下版本
  11. linux服务端修改EDT为东八区,EDT开发环境配置
  12. java window的对象方法_Javascript:window对象的方法
  13. sharepoint 2007 无法自动跳转到default.aspx
  14. 用友u8怎么导出凭证_用友软件如何导出凭证模板?
  15. 访问类路径下资源的两种方式
  16. html 收藏本页,设为首页与加入收藏的JS代码(多浏览器支持)
  17. web前端面试题(全)
  18. 查看笔记本预装系统的产品密钥
  19. Qt编写安防视频监控系统46-视频存储
  20. 如何在2019年开发Android应用程序:拥抱“新” Android

热门文章

  1. 知识补给站:处理器微架构
  2. 【技巧】Pandas使用drop后使用reset_index重置索性
  3. JSP页面在浏览器中显示HTML代码被截断显示不全
  4. 【STM32】5—UART串口(中断模式)
  5. 全球及中国舷外电动中央控制台船行业竞争调查分析及策略规划报告2022-2027年
  6. Microsoft Graph Toolkit 代理 Provider
  7. Android复制查词功能,有道词典Android 3.6版发布 新增“复制查词”功能
  8. 华硕品牌机驱动存储位置
  9. Openwrt学习笔记(四)——系统开机启动 (续)
  10. Oracle加索引的时候快照过久,【Oracle 11g】ORA-01555: snapshot too old(快照过旧)错误