一、模块
Python 模块,是一个Python文件,以.py结尾,包含了Python对象定义和Python语句。
模块能定义函数,类和变量,模块里也能包含可执行的代码。
1. 导入模块
- import 模块名
- from 模块名 import 功能名
- from 模块名 import *
- import 模块名 as 别名
- from 模块名 import 功能名 as 别名
- import
# 1. 导入模块
import 模块名
import 模块名1, 模块名2
# 2. 调用功能
模块名.功能名()
# 方法一:import 模块名; 模块名.功能名
import math
print(math.sqrt(9)) # 开平方
- from…import…:调用该功能时不需要加模块名限定
from 模块名 import 功能1, 功能2, 功能3....
from math import sqrt # 调用该功能时不需要加模块名限定
print(sqrt(9)) # 开平方
- from … import *:调用该功能时不需要加模块名限定
from 模块名 import *
from math import *
print(sqrt(9))
2. as定义别名
# 模块定义别名
import 模块名 as 别名
# 功能定义别名
from 模块名 import 功能 as 别名
import time as t
t.sleep(2)
print("Hello")
from time import sleep as sl
sl(2)
print("World")
注意:定义别名之后,就不能使用原来的模块名或功能名。
3. 制作模块
在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模块名必须要符合标识符命名规则。
def testA(a, b):
return a + b
# __name__ 是系统变量,是模块标识符,值是:如果是自身模块值是__main__,否则是当前的模块的名字
if __name__ == "__name__":
print(testA(1, 2)) # 测试代码
# 制作的模块调用
from my_module1 import testA
print(testA(2, 2))
导入模块注意事项:
- 自己的文件名不要和已有模块名重复,否则导致模块功能无法使用。
- 使用 from 模块名 import 功能的时候,如果功能名字重复,调用到的是最后定义或导入的功能
应该避免模块名和自定义名字重复
import time
print(time) # <module 'time' (built-in)>
time = 1
print(time) # 1
4. __all __列表
如果一个模块文件中有__all__变量,当使用from xxx import * 导入时,只能导入这个列表中的元素。
__all__ = ["testA"]
def testA():
print("testB")
def testB():
print("testB")
# __name__ 是系统变量,是模块标识符,值是:如果是自身模块值是__main__,否则是当前的模块的名字
if __name__ == "__name__":
print(testA(1, 2))
测试__all__模块调用
from my_module1 import *
testA()
# 因为testB 函数没有添加到all列表, 只有all列表里面的功能才能导入
testB() # 会报错
二、包
包将有联系的模块组织在一起,即放到同一文件夹下,并且在这个文件夹创建一个名字为__init__.py
文件,那么这个文件夹就称为包。
1. 制作包
【new】-【Python Package】- 输入包名 - 【ok】- 新建功能模块(有联系的模块)。
注意:新建包后,包内会自动创建__init__.py的文件,这文件控制着包的导入行为。
2. 导入包
- 方法一
import 包名.模块名
包名.模块名.目标
import mypackage.my_module1
mypackage.my_module1.print_info1()
from mypackage.my_module1 import print_info1
print_info1()
- 方法二
注意:必须在__init__.py文件中添加 all = [],控制允许导入的模块列表。
from 包名 import *
模块名.目标
from mypackage import *
my_module1.print_info1()
my_module2.print_info2()