模块和包
一、模块
模块(Module):它是一个Python文件,以.py结尾,模块中可以定义函数、类以及变量,
1.1 模块导入
1.1.1 导入方式一(import …)
- 语法
# 1.导入模块
import 模块名
# 2.调用功能
模块名.功能名()
- 体验
import math
# 向上取整
print(math.ceil(1.25)) # 2
# 向下取整
print(math.floor(2.25)) # 2
1.1.2 导入方式二(from … import …)
- 语法
from 模块名 import 功能1, 功能2...
- 体验
from math import sqrt
# 开平方根,结果是浮点型
print(sqrt(4)) # 2.0
1.1.3 导入方式三(from 模块名 import *)
- 语法
from 模块名 import *
from random import *
# 返回0~1的随机小数,左闭右开
print(random())
# 随机获取指定范围内的数字
print(randrange(0, 10))
1.1.4 定义别名as
- 语法
# 模块定义别名
import 模块名 as 别名
# 功能定义别名
from 模块名 import 功能 as 别名
1.2 自定义模块
# 模块名称:my_module.py
def say_hello(name):
print("Hello!", name)
# 导入模块
import my_module
# 引用模块中的函数say_hello
my_module.say_hello("jack")
1.3 模块搜索路径
当导入一个模块,Python解析器对模块位置的搜索顺序是:
1.当前目录
2.如果不在当前目录,Python则搜索在PYTHONPATH下的所有目录
3.如果都找不到,则会查看默认目录。
模块搜索路径存储在system模块的sys.path变量中,变量中包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
1.4 __ all__
如果一个模块文件有__all__变量,当使用 from xxx import * 导入,只能导入这个列表中的元素。
- my_model 模块代码
__all__ = ['test1']
def test1():
print('test1')
def test2():
print('test2')
- module_demo代码
from my_module import *
test1()
1.5 主函数
- 每个模块的定义中都包括一个记录模块名称的变量_name_ ,如果在当前模块中运行程序,则它的值为_main_,如果该模块被其他模块调用,则它的值为模块名称。
# my_module.py
def test1():
print('test1')
def test2():
print('test2')
if __name__ == '__main__':
test1()
二、包
包将有联系的模块组织到一起,即放到同一文件夹下,在该文件夹下必须存在__init__.py文件,它是包的标识文件。
2.1 新建包
2.2 导入包
2.2.1 方法一
# 导入
import 包名.模块名
# 调用功能
包名.模块名.功能
import package.my_module1
package.my_module1.info_print()
# print('my_module1')
2.2.2 方法二
注意:必须在__init__.py文件中添加__all__ = [ ],控制允许导入的模块列表。
from 包名 import *
模块名.功能
# __init__.py
__all__ = ['my_module1', 'my_module2']
from package import *
my_module1.info_print()
my_module2.info_print()