Python 模块

python 模块可以定义为 python 程序文件,其中包含 python 代码,包括 python 函数、类或变量。换句话说,我们可以说我们的 python 代码文件以扩展名(.py)被视为模块。我们可能在 python 模块中有一个可运行的代码。

Python 中的模块为我们提供了以逻辑方式组织代码的灵活性。

要将一个模块的功能用于另一个模块,我们必须导入特定的模块。

例子

在这个例子中,我们将创建一个名为 file.py 的模块,它包含一个函数 func,该函数 func 包含在控制台上打印一些消息的代码。

让我们创建名为 file.py. 的模块

#displayMsg prints a message to the name being passed. 
def displayMsg(name)
print("Hi "+name);

这里,我们需要将这个模块包含到我们的主模块中,以调用在名为 file 的模块中定义的 displayMsg()方法。

在 python 代码中加载模块

我们需要在 python 代码中加载该模块来使用它的功能.python 提供了两种类型的语句,定义如下。

  1. 进口声明

  2. 自导入语句

import 声明

import 语句用于将一个模块的所有功能导入到另一个模块中。在这里,我们必须注意到,我们可以通过将任何 python 源文件作为模块导入另一个 python 源文件来使用该文件的功能。

我们可以用一个 import 语句导入多个模块,但是一个模块被加载一次,无论加载多少次,它都已经被导入到我们的文件中。

下面给出了使用 import 语句的语法。

import module1,module2,........ module n

因此,如果我们需要调用 file.py 中定义的函数 displayMsg(),我们必须将该文件作为一个模块导入到我们的模块中,如下例所示。

示例:

import file;
name = input("Enter the name?")
file.displayMsg(name)

输出:

Enter the name?John
Hi John

from-import

python 提供了仅导入模块特定属性的灵活性,而不是将整个模块导入命名空间。这可以通过使用 from?导入语句。下面给出了使用 from-import 语句的语法。

from < module-name> import <name 1>, <name 2>..,<name n> 

考虑以下名为计算的模块,它包含求和、乘法和除法三个函数。

calculation.py:

#place the code in the calculation.py 
def summation(a,b):
return a+b
def multiplication(a,b):
return a*b;
def divide(a,b):
return a/b;

Main.py:

from calculation import summation  
#it will import only the summation() from calculation.py
a = int(input("Enter the first number"))
b = int(input("Enter the second number"))
print("Sum = ",summation(a,b)) #we do not need to specify the module name while accessing summation()

输出:

Enter the first number10
Enter the second number20
Sum = 30

来自…如果我们事先知道要从模块中导入的属性,那么使用 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. 
import calculation as cal;
a = int(input("Enter a?"));
b = int(input("Enter b?"));
print("Sum = ",cal.summation(a,b))

输出:

Enter a?10
Enter b?20
Sum = 30

使用 dir()函数

dir()函数返回在传递的模块中定义的名称的排序列表。该列表包含该模块中定义的所有子模块、变量和函数。

考虑下面的例子。

例子

import json

List = dir(json)

print(List)

输出:

['JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__builtins__', '__cached__', '__doc__',
'__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__',
'_default_decoder', '_default_encoder', 'decoder', 'dump', 'dumps', 'encoder', 'load', 'loads', 'scanner']

reload()函数

正如我们已经说过的,一个模块被加载一次,不管它被导入 python 源文件的次数是多少。但是,如果您想重新加载已经导入的模块来重新执行顶层代码,python 为我们提供了 reload()函数。下面给出了使用 reload()函数的语法。

reload(<module-name>)

例如,要重新加载前面示例中定义的模块计算,我们必须使用下面一行代码。

reload(calculation)

变量的范围

在 Python 中,变量与两种类型的范围相关联。模块中定义的所有变量都包含全局范围,除非或直到它在函数中定义。

函数内部定义的所有变量都包含一个局部范围,该范围仅限于该函数本身。我们不能全局访问局部变量。

如果两个变量在两个不同的作用域(即局部和全局)中用相同的名称定义,那么优先级将始终给予局部变量。

考虑下面的例子。

例子

name = "john"
def print_name(name):
print("Hi",name) #prints the name that is local to this function only.
name = input("Enter the name?")
print_name(name)

输出:

Hi David 


Python 包

python 中的包通过提供分层目录结构来方便开发人员使用应用开发环境,其中包包含子包、模块和子模块。这些包用于有效地对应用级代码进行分类。

让我们在您的主目录中创建一个名为 Employees 的包。请考虑以下步骤。

1.在路径/ home上创建一个名为 Employees 的目录。

2.在路径/ home / Employees 上创建一个名为 ITEmployees.py 的 python 源文件。

项目员工. py

def getITNames():
List = ["John", "David", "Nick", "Martin"]
return List;

3.同样,再创建一个名为 BPOEmployees.py 的 python 文件,并创建一个函数 getBPONames()。

4.现在,我们在第一步中创建的雇员目录包含两个 python 模块。为了使这个目录成为一个包,我们需要在这里包含一个文件,即 init.py,包含此目录中定义的模块的导入语句。

init.py

from ITEmployees import getITNames
from BPOEmployees import getBPONames

5.现在目录 Employees 变成了包含两个 python 模块的包。这里我们必须注意到,我们必须创建 init.py 在一个目录中,将这个目录转换成一个包。

6.要使用雇员包中定义的模块,我们必须在 python 源文件中导入这些模块。让我们在主目录(/home)中创建一个简单的 python 源文件,它使用这个包中定义的模块。

测试 py

import Employees
print(Employees.getNames())

输出:

['John', 'David', 'Nick', 'Martin']

我们可以在包裹里有子包裹。我们可以根据应用需求将包嵌套到任何级别。

下图显示了应用库管理系统的目录结构,该系统包含三个子包,即管理员、图书管理员和学生。子包包含 python 模块。

原文:https://www.javatpoint.com/python-modules