一文带你分清Python模块、包和库。一、模块 Python模块(Module),是一个Python文件,以。py结尾,包含了Python对象定义和Python语句。 模块能定义函数,类和变量,模块也能包含可执行的代码。1。1导入模块 1。1。1导入模块的方式import模块名from模块名import功能名from模块名importimport模块名as别名from模块名import功能名as别名1。2导入方式详解 import语法:1。导模块import模块名import模块名1,模块名2。。。2。调功能模块名。功能名() 体验:importmathprint(math。sqrt(9))3。0 from。。import。。 语法:from模块名import功能1,功能2,功能3。。。 体验:frommathimportsqrtprint(sqrt(9))from。。import 语法from模块名import 体验:frommathimportprint(sqrt(9)) as定义别名 语法模块定义别名import模块名as别名功能定义别名from模块名import功能as别名 体验模块别名importtimeastttt。sleep(2)print(hello)功能别名fromtimeimportsleepasslsl(2)print(hello)1。2制作模块 在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说定义模块名必须要符合标识符命名规则。 1。2。1定义模块 新建一个Python文件,命名为mymodule1。py,并定义testA函数。deftestA(a,b):print(ab) 1。2。2测试模块 在实际开中,当一个开发员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发员会在py文件中添加一些测试信息。,例如,在mymodule1。py文件中添加测试代码。deftestA(a,b):print(ab)testA(1,1)12345 此时,无论是当前文件,还是其他已经导入了该模块的件,在运行的时候都会自动执行testA函数的调用。 解决办法如下:deftestA(a,b):print(ab)只在当前件中调该函数,其他导的件内不符合该条件,则不执testA函数调ifnamemain:testA(1,1) 1。2。3调用模块importmymodule1mymodule1。testA(1,1) 1。2。4注意事项 如果使用from。。import。。或from。。import导入多个模块的时候,且模块内有同名功能。当调这个同名功能的时候,调用到的是后导入的模块的功能。 体验:模块1代码defmytest(a,b):print(ab)模块2代码defmytest(a,b):print(ab)导模块和调功能代码frommymodule1importmytestfrommymodule2importmytestmytest函数是模块2中的函数mytest(1,1)1。3模块的定位顺序 当导入一个模块,Python解析器对模块位置的搜索顺序是: 1。当前目录 2。如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。 3。如果都找不到,Python会察看默认路径。UNIX下,默认路径般为usrlocallibpython 模块搜索路径存储在system模块的sys。path变量中。变量包含当前目录,PYTHONPATH和由安装过程决定的默认目录。 注意的件名不要和已有模块名重复,否则导致模块功能用法使用使用from模块名import功能的时候,如果功能名字重复,调用到的是最后定义或导入的功能。1。4all 如果一个模块文件中有all变量,当使用fromxxximport导入时,只能导入这个列表中的元素。 mymodule1模块代码:all〔testA〕deftestA():print(testA)deftestB():print(testB) 导入模块的文件代码:frommymodule1importtestA()testB() 二、库 严格来说,Python中没有库(library)的概念,模块(module)和包(package)才是Python语法中有的概念。这个库的概念是从其他编程语言引进来的,库的概念是具有相关功能模块的集合,只是一个通俗的说法。平时说的库既可以是一个模块,也可以是一个包。 包和模块之间的关系,如下图: 一个包里面可以包含很多的模块。模块是一个包含有组织的代码片段,一个。py文件对应一个模块,文件名就是模块名(去除掉后缀。py)。三、包 包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为init。py文件,那么这个文件夹就称之为包。3。1制作包 〔New〕〔PythonPackage〕输入包名〔OK〕新建功能模块(有联系的模块)。 注意:新建包后,包内部会自动创建init。py文件,这个文件控制着包的导入。 3。1。1快速体验 1。新建包mypackage 2。新建包内模块:mymodule1和mymodule2 3。模块内代码如下mymodule1print(1)definfoprint1():print(mymodule1) mymodule2print(2)definfoprint2():print(mymodule2)3。2导入包 3。2。1方法一:import包名。模块名包名。模块名。标 3。2。2快速体验importmypackage。mymodule1mypackage。mymodule1。infoprint1() 3。2。3方法二 注意:必须在init。py件中添加all〔〕,控制允许导的模块列表。from包名import模块名。标 3。2。4快速体验frommypackageimportmymodule1。infoprint1()