Python模块和包
模块
在Python中,一个.py
的python文件就是一个模块。
导入模块的几种方式
-
import 模块名
-
from 模块名 import 功能名
-
from 模块名 import *
-
import 模块名 as 别名
-
from 模块名 import 功能名 as 别名
import
import 模块名
import 模块名1, 模块名2...
# 导入模块
import math
# 模块名.功能名()
print(math.sqrt(16)) # 4.0
from...import...
from 模块名 import 功能名
from 模块名 import 功能1, 功能2,...
from math import sqrt
print(sqrt(16)) # 4.0
from...import*
from math import *
print(sqrt(16)) # 4.0
as定义别名
import 模块名 as 别名
from 模块名 import 功能 as 别名
# import time as tt
# tt.sleep(2)
# print('hello world!')
from time import sleep as sl
sl(2)
print('hello world!')
测试自己的模块
新建my_module.py文件
def testA(a, b):
print(a + b)
使用my_module
import my_module
my_module.testA(2, 2) # 4
if __name__ == '__main__'
的使用
当在my_module.py文件直接执行时,模块属性__name__
等于__main__
my_module.py
def testA(a, b):
print(a + b)
print(__name__) # __main__
当my_module.py文件被导入到其他文件执行时 __name__
等于 my_module
(文件名称去掉.py)
my_module.py
def testA(a, b):
print(a + b)
print(__name__) # my_module
其他文件使用my_module
import my_module
my_module.testA(2, 2) # 4
导入的模块搜索顺序
首先判断这个模块是不是built-in内建模块,如果是内建模块则引入内建模块,如果不是则在sys.path返回的列表中寻找。
import sys
print(sys.path)
__all__
如果一个模块文件中有__all__
,当使用from xxx import *
时,只能导入这个列表中的元素。
my_module.py
__all__ = ['testA']
def testA():
print('testA')
def testB():
print('testB')
调用my_module
from my_module import *
testA() # testA
包
包用来管理模块,将多个模块放在一个文件夹内,就形成了一个包,包中必须包含__init__.py
文件。
新建包
新建mypackage包,包括以下三个文件:
-- mypackage
-- __init__.py
-- my_module1.py
-- my_module2.py
my_module1.py
print('第一个模块')
def info_print1():
print('my_module1')
my_module2.py
print('第二个模块')
def info_print2():
print('my_module2')
导入包
方法1:
# import 包名.模块名
import mypackage.my_module1
# 包名.模块名.功能名
mypackage.my_module1.info_print1()
方法2:
在__init__.py
文件中使用 __all__ = []
加入允许导入的模块。
__init__.py
__all__ = ['my_module1']
导入mypackage
from mypackage import *
my_module1.info_print1()