概述
模块
Python模块是一个Python文件,以.py结尾,包含了Python对象定义和Python语句
模块能定义函数,类和变量,模块里也能包含可执行的代码
导入模块的方式
# import 模块名
import math
math.sqrt(9) # 3.0
# from 模块名 import 功能名
from math import sqrt
sqrt(9) # 3.0
# from 模块名 import * (*表示全部)
from math import *
sqrt(9) # 3.0
# import 模块名 as 别名
import math as sx
sx.sqrt(9) # 3.0
# from 模块名 import 功能名 as 别名
from math import sqrt as sq
sq(9) # 3.0
自定义模块
Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字,也就是自定义模块名必须要符合标识符命名规则
制作模块
新建一个Python文件 命名为my_module1.py 并定义testA 函数
def testA(a,b):
return a + b
测试代码
实际开发中,开发编写一个模块后,开发会在文件中添加测试信息如
print(testA(1,2))
此时无论当前文件还是其他已经导入的文件,运行时都会自动执行testA函数的调用
解决办法:只有在当前文件中调用该函数,其他导入的文件不符合该条件,不执行该函数的调用,添加代码
if __name__ =="__main__":
print(testA(1,2)) # 3
调用模块
import my_module1
print(my_module1.testA(2,3)) # 5
注意事项
如果使用 from … import … 或 from … import * 导入多个模块的时候,且模块内 有同名功能。当调用这个同名功能的时候,调⽤到的是后面导入的模块的功能。
# my_module1.py
def my_test(a,b):
return a + b
# my_module2.py
def my_test(a,b):
return a - b
from my_module1 import my_test
from my_module2 import my_test
print(mytest(5,2)) # 3
模块定位顺序
当导入一个模块,Python解释器对模块位置的搜索顺序是
1.当前目录
2.如果不在当前目录,Python则搜索shell变量pythonpath下的目录
3.如果都没有,Python会查看默认目录,一般为usr/local/lib/python
模块搜索路径存储在system模块的sys.path中,变量里包含当前目录,pythonpath和由安装过程决定的目录
注意:
自己的文件名不要和已有模块名一致,否则导致模块无法使用
导入功能名字一致时,调用的是最后定义或者导入的功能
all
如果一个文件中有__all__变量,当使用from xxx import * 导入时,只能导入这个列表中的元素
# my_module1.py
__all__ = ["testA"]
def testA():
print("testA")
def testB():
print("testB")
from my_module1 import *
testA() # testA
testB() # name 'testB' is not defined
包
将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包。
制作包
- 新建包mypackage
- 新建包内模块: my_module1 和 my_module2
- 模块内代码如下
# my_module1.py
print(1)
def info_print1():
print("my_module1")
# my_module2.py
print(2)
def info_print2():
print("my_module2")
导入包
import 包名.模块名
import 包名.模块名
包名.模块名.方法
import mypackage.my_module1
mypackage.my_module1.info_print1()
import mypackage.my_module2
mypackage.my_module2.info_print2()
from 包名 import *
注意:必须在 init.py 文件中添加 all = [] ,控制允许导入的模块列表。
from 包名 import *
模块名.方法
# __init__.py
__all__ = ["my_module1","my_module1"]
from my_package import *
my_module1.info_print1()
my_module2.info_print2()
最后
以上就是典雅故事为你收集整理的Python从0到1之模块和包模块的全部内容,希望文章能够帮你解决Python从0到1之模块和包模块所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复