python-模块与包

文章发布时间:

最后更新时间:

文章总字数:
1.2k

预计阅读时间:
5 分钟

一.模块

  • 模块是一个Python文件,每个 .py 文件就是一个模块

  • 通过 import 语句导入模块中的内容

  • 一个项目拆分成多个模块会更方便阅读理解,更具有模块化

  • 模块导入后可以使用其中的变量、函数、类等

1.1 导入语法

  1. import 模块名 [ as 模块新名字1]

导入一个模块到当前程序

  1. from 模块名 import 模块属性名 [ as 属性新名]

导入一个模块内部的部分属性到当前程序,比如函数

  1. from 模块名 import *

导入一个模块内部的全部属性到当前程序

1
2
3
4
5
6
7
# 在外面定义了module和module1的模块
import module
import module1

module.test()

module1.is_1(1)

结果:

1
2
3
这是一个模块

1

注意,模块与模块之间不能嵌套导入,比如模块1中导入模块2,在一个.py文件中导入模块1,是访问不到模块2里的东西的。

1.2 内部属性

file 绑定模块的路径,打印会返回当前模块路径

name 绑定模块的名称:

   如果是主模块(首先启动的模块)则绑定 '__main__'如果不是主模块则 绑定 xxx.py 中的 xxx 这个模块名。什么意思呢?就是在这个py文件里打印`__name__`就是'__main__',如果在另一个模块里打印`__name__`,然后再用现在这个py文件里导入另一个模块,则打印出来的就是模块名。

实际上俩存储的都是字符串

1.3 内置模块

  1. 数学模块
1
2
3
4
5
6
7
8
9
10
11
12
13
# 数学模块
import math

# 开平方
a = 9
b = math.sqrt(a)
print(b)

# pi即圆周率
print(math.pi)

# 对数,底数默认为e,更改后面的值即可更改底数
print(math.log(2,4))

结果:

1
2
3
3.0
3.141592653589793
0.5
  1. 随机数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 随机数
import random

# 生成一个范围在[0,1)的数
x = random.random()
print(x)

# 生成一个特定范围的数,这里是在[-5,6)之间,即(max-min)后面再加初始值
y = random.random() * (6-(-5))+(-5)
print(y)

# 从一个序列中,随机返回一个元素
x = [1,2,34]
print(random.choice(x))
print(random.choice('ABCD'))

# 生成整数
a = random.randint(1,10)
print(a)

# random.shuffer(x) # 把列表X 打乱
x = [1,2,3,4,5,6,7,8,9,10]
random.shuffle(x)
print(x)

结果:

1
2
3
4
5
6
0.2984475886500685
0.03470368839121374
1
A
5
[6, 10, 8, 9, 1, 7, 4, 5, 2, 3]
  1. time 模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# time 模块
import time

# 输出秒数,这里其实是根据1970年1月1日8时开始计算的
# 其可以用于生成时间戳,生成的就是完全不同的字符串,也可以拿来做字典的键
print(time.time())

# 睡眠,让程序在此处暂停几秒
print("2秒后打印")
time.sleep(2)
print()
print("打印咯")

# 输出当前时间,精确到年、月、日、时、分、秒等
print(time.localtime())

# 将时间转为字符串,精确到哪里取决于你的占位符的多少
time.strftime("%Y-%m-%d %H:%M:%S")

结果:

1
2
3
4
5
6
7
8
9
1742627503.7597053
2秒后打印

打印咯
time.struct_time(tm_year=2025, tm_mon=3, tm_mday=22, tm_hour=15, tm_min=11,

tm_sec=45, tm_wday=5, tm_yday=81, tm_isdst=0)

'2025-03-22 15:11:45'
  1. os 模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# os模块
import os

# 即当前项目运行的文件夹路径
print(os.getcwd())

# 把多个路径拼接起来,函数不在乎是否存在这个路径
os.path.join(os.getcwd(),'test.txt')

# 转换为相对路径,相对当前文件
os.path.relpath(os.path.join(os.getcwd(),'test.txt'))

# 创建文件夹
os.mkdir('test')

# 列出文件夹下的所有文件,'.'表示当前所处项目文件夹
print(os.listdir('.'))

# 删除文件夹
os.rmdir('test')

# 删除文件
os.remove('test.txt')

结果:

1
2
d:\Software\code\py\hqyj\3.22
['3.22.ipynb', '3.22_1.ipynb', '3.22_2.ipynb', 'module.py', 'module1.py', 'test', 'test.py', 'test.txt', '__pycache__']

1.4 第三方模块

要先下载在当前环境下,才能进行导入。

二.包

  • 包的本质是一个包含 init.py 文件的文件夹。

  • 其中装了很多模块

  • 从网上下载的第三方库,其实就是包

2.1 怎么用

1
2
3
# 举几个引入包内模块的例子
import tool.m1
from tool import m1

2.2 _init.py

  • 告诉Python解释器当前目录应被视为一个包

  • 可以包含任何代码,通常用于包的初始化操作,如变量初始化、导入模块等。这些代码在包被导入时执行

  • 通过 all 变量明确指定从包中可以导入哪些模块,从而限制包的公开接口

  • init.py 中定义的变量和函数可以在包的模块中共享,相当于是当前文件夹的数据

1
2
3
4
# 这就是在__init__.py中定义的变量
from tool import a,b
import tool.m1
print(a,b)

结果:

1
1 2
1
2
3
# 假设__all__里面只有m1模块,那 * 这种导入就只能导入__all__中的模块
from tool import *
m2.fn1()

结果:

是运行不了的。