龙空技术网

Python | 模块和包

VT聊球 80

前言:

目前朋友们对“pythonpackage”大体比较着重,咱们都想要分析一些“pythonpackage”的相关资讯。那么小编同时在网络上网罗了一些关于“pythonpackage””的相关内容,希望小伙伴们能喜欢,兄弟们一起来了解一下吧!

python模块(Module),是一个python文件,以.py结尾,包含了python对象定义和python语句。

模块能定义函数,类和变量,模块里也能包含可执行的代码。

导入模块

导入模块的方式

import 模块名from 模块名 import 功能名form 模块名 import *import 模块名 as 别名from 模块名 import 功能名 as 别名

import

import mathprint(math.sqrt(9))  # 3.0

from ... import ...

from math import sqrtprint(sqrt(9))  # 3.0

as定义别名

# 1. 模块别名import time as tttt.sleep(2)print('hello')# 2. 功能别名from time import sleep as slsl(2)print('hello')
制作模块

在python中,每个python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模块名必须要符合标识符命名规则。

定义模块

新建一个python文件,命名为my_module1.py,并定义testA函数。

def testA(a, b):    print(a + b)

测试模块

在实际开发中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试信息,例如,在my_module1.py文件中添加测试代码。

def testA(a, b):    print(a + b)testA(2, 4)

此时,无论是当前文件,还是其他已经导入了该模块的文件,在运行的时候都会自动执行testA函数的调用。

解决方法如下:

def testA(a, b):    print(a + b)# 只在当前文件中调用该函数,其他导入的文件内不符合该条件,则不执行testA函数调用# __name__是系统变量,是模块的标识符,值是:如果是自身模块是__main__,否则是当前模块的名字if __name__ == '__main__':    testA(2, 4)
模块定位顺序

当导入一个模块,python解析器对模块位置的搜索顺序是:

当前目录如果不在当前目录,python则搜索在shell变量PYTHONPATH下的每个目录如果都找不到,python会查看默认路径。UNIX下,默认路径一般为/user/local/lib/python模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。__all__

如果一个模块文件中有__all__变量,当使用 from xxx import * 导入时,只能导入这个列表中的元素。

my_module1模块代码

__all__ = ['testA']def testA():    print('testA')def testB():    print('testB')
导入模块的文件代码
from my_module2 import *testA()  # testA# testB()  # NameError: name 'testB' is not defined

包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py文件,那么这个文件夹就称之为包。

制作包

[New] -- [Python Package] -- 输入包名 -- [OK] -- 新建功能模块(有联系的模块)。

注意:新建包后,包内部会自动创建__init__.py文件,这个文件控制着包的导入行为。

print(1)def info_print1():    print('my_module1')
print(2)def info_print2():    print('my_module2')
导入包

方法一

import mypackage.my_module1mypackage.my_module1.info_print1()

方法二

注意:必须在__init__.py文件中添加__all__ = [],控制允许导入的模块列表。

from mypackage import *my_module1.info_print1()# my_module2.info_print2()  # NameError: name 'my_module2' is not defined

标签: #pythonpackage