Python 模块
Python 模块
python 模块可以定义为 python 程序文件,其中包含 python 代码,包括 python 函数、类或变量。换句话说,我们可以说我们的 python 代码文件以扩展名(.py)被视为模块。我们可能在 python 模块中有一个可运行的代码。
Python 中的模块为我们提供了以逻辑方式组织代码的灵活性。
要将一个模块的功能用于另一个模块,我们必须导入特定的模块。
例子
在这个例子中,我们将创建一个名为 file.py 的模块,它包含一个函数 func,该函数 func 包含在控制台上打印一些消息的代码。
让我们创建名为 file.py. 的模块
#displayMsg prints a message to the name being passed. |
这里,我们需要将这个模块包含到我们的主模块中,以调用在名为 file 的模块中定义的 displayMsg()方法。
在 python 代码中加载模块
我们需要在 python 代码中加载该模块来使用它的功能.python 提供了两种类型的语句,定义如下。
进口声明
自导入语句
import 声明
import 语句用于将一个模块的所有功能导入到另一个模块中。在这里,我们必须注意到,我们可以通过将任何 python 源文件作为模块导入另一个 python 源文件来使用该文件的功能。
我们可以用一个 import 语句导入多个模块,但是一个模块被加载一次,无论加载多少次,它都已经被导入到我们的文件中。
下面给出了使用 import 语句的语法。
import module1,module2,........ module n |
因此,如果我们需要调用 file.py 中定义的函数 displayMsg(),我们必须将该文件作为一个模块导入到我们的模块中,如下例所示。
示例:
import file; |
输出:
Enter the name?John |
from-import
python 提供了仅导入模块特定属性的灵活性,而不是将整个模块导入命名空间。这可以通过使用 from?导入语句。下面给出了使用 from-import 语句的语法。
from < module-name> import <name 1>, <name 2>..,<name n> |
考虑以下名为计算的模块,它包含求和、乘法和除法三个函数。
#place the code in the calculation.py |
from calculation import summation |
输出:
Enter the first number10 |
来自…如果我们事先知道要从模块中导入的属性,那么使用 import 语句总是更好。它不会让我们的代码变得更重。我们还可以使用*从模块中导入所有属性。
请考虑以下语法。
from <module> import * |
重命名模块
Python 为我们提供了导入具有特定名称的模块的灵活性,这样我们就可以在 python 源文件中使用这个名称来使用那个模块。
重命名模块的语法如下。
import <module-name> as <specific-name> |
例子
#the module calculation of previous example is imported in this example as cal. |
输出:
Enter a?10 |
使用 dir()函数
dir()函数返回在传递的模块中定义的名称的排序列表。该列表包含该模块中定义的所有子模块、变量和函数。
考虑下面的例子。
例子
import json |
输出:
['JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__builtins__', '__cached__', '__doc__', |
reload()函数
正如我们已经说过的,一个模块被加载一次,不管它被导入 python 源文件的次数是多少。但是,如果您想重新加载已经导入的模块来重新执行顶层代码,python 为我们提供了 reload()函数。下面给出了使用 reload()函数的语法。
reload(<module-name>) |
例如,要重新加载前面示例中定义的模块计算,我们必须使用下面一行代码。
reload(calculation) |
变量的范围
在 Python 中,变量与两种类型的范围相关联。模块中定义的所有变量都包含全局范围,除非或直到它在函数中定义。
函数内部定义的所有变量都包含一个局部范围,该范围仅限于该函数本身。我们不能全局访问局部变量。
如果两个变量在两个不同的作用域(即局部和全局)中用相同的名称定义,那么优先级将始终给予局部变量。
考虑下面的例子。
例子
name = "john" |
输出:
Hi David |
Python 包
python 中的包通过提供分层目录结构来方便开发人员使用应用开发环境,其中包包含子包、模块和子模块。这些包用于有效地对应用级代码进行分类。
让我们在您的主目录中创建一个名为 Employees 的包。请考虑以下步骤。
1.在路径/ home上创建一个名为 Employees 的目录。
2.在路径/ home / Employees 上创建一个名为 ITEmployees.py 的 python 源文件。
项目员工. py
def getITNames(): |
3.同样,再创建一个名为 BPOEmployees.py 的 python 文件,并创建一个函数 getBPONames()。
4.现在,我们在第一步中创建的雇员目录包含两个 python 模块。为了使这个目录成为一个包,我们需要在这里包含一个文件,即 init.py,包含此目录中定义的模块的导入语句。
init.py
from ITEmployees import getITNames |
5.现在目录 Employees 变成了包含两个 python 模块的包。这里我们必须注意到,我们必须创建 init.py 在一个目录中,将这个目录转换成一个包。
6.要使用雇员包中定义的模块,我们必须在 python 源文件中导入这些模块。让我们在主目录(/home)中创建一个简单的 python 源文件,它使用这个包中定义的模块。
测试 py
import Employees |
输出:
['John', 'David', 'Nick', 'Martin'] |
我们可以在包裹里有子包裹。我们可以根据应用需求将包嵌套到任何级别。
下图显示了应用库管理系统的目录结构,该系统包含三个子包,即管理员、图书管理员和学生。子包包含 python 模块。