模块是什么?
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块能定义函数,类和变量,模块里也能包含可执行的代码。
python模块就是java中的类文件
导入模块
方式一:
语法:导入
- import 模块名
- import 模块名1, 模块n # 不推荐
语法:使用
模块名.功能
示例:
import random
random.random()
方式二:
语法:使用时,省去模块名,直接使用功能名即可。
- from 模块名 import 功能名 # 导入模块中的部分功能
- from 模块名 import 功能名1, 功能名n
- from 模块名 import * # 导入模块中的所有功能
语法:使用
功能名()
示例:
from random import random
# 使用时,省去模块名,直接使用功能名即可
print(random())
方式三:
语法:导入
- import 模块名 as 别名
- from 模块名 import 功能名 as 别名
语法:使用
import 模块名 as 别名
别名.功能名
示例:
import random as r
print(r.random())
语法:使用
from 模块名 import 功能名 as 别名
别名()
示例:
from random import randint as r_int, random as r_dom
print(r_dom())
制作模块
在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。 也就是说自定义模块名必须要符合标识符命名规则。
示例:
1. 制作模块
# my_module.py
def add(a, b):
return a + b
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
return f"{self.name} 和你说 hello!"
2. 使用模块
import my_module
print(my_module.add(10, 20)) # 30
dog = my_module.Animal("Dog")
print(dog.speak()) # Dog 和你说 hello!
模块中的测试功能
如果想在模块中用于测试的方法自己可以使用,不被调用者使用,可以使用 `__name__`, `__name__`在自己调用时打印`__main__`,在被调用者打印`模块名`。
# my_module.py
def add(a, b):
return a + b
if __name__ == '__main__':
print(__name__) # __main__
print(add(1, 1))
模块查找顺序
当导入一个模块,Python解析器对模块位置的搜索顺序是:
- 当前目录
- 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
- 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
注意:
- 自己的文件名不要和已有模块名重复,否则导致模块功能无法使用
- `使用from 模块名 import 功能`的时候,如果功能名字重复,调用到的是后定义或导入的功能。
__all__
如果一个模块文件中有`__all__`变量,当使用`from xxx import *`导入时,只能导入这个列表中的元素。
# my_module.py
__all__ = ["test1", "test2"]
def test1(a, b):
return a + b
def test2(a, b):
return a - b
def test3(a, b):
return a * b
包
Python 包是一个包含多个模块的文件夹,用于组织和结构化 Python 项目。包允许开发者将相关模块组合在一起,形成一个层次结构,以便于管理和重用代码。
制作包
[New] — [Python Package] — 输入包名 — [OK] — 新建功能模块。
注意:新建包后,包内部会自动创建`__init__.py`文件,这个文件控制着包的导入行为。
导入包
方式一:
语法:
import 包名.模块名
包名.模块名.功能名
import module.my_module1
module.my_module1.test1(1, 2)
方式二:
语法:
from 包名 import *
模块名.功能
注意:
使用 `from 包名 import *` 必须在`__init__.py`文件中添加`__all__ = []`,控制允许导入的模块列表。
使用 `from 包名 import 模块名` 的时候不需要管`__init__.py`文件的`__all__ = []`
示例:
from module import *
my_module1.test1(1, 2)