Python的模块
python模块可以定义为python程序文件,其中包含python代码,包括python函数,类或变量。换句话说,我们可以说用扩展名(.py)保存的python代码文件被视为模块。我们可能在python模块中有一个可运行的代码。
Python中的模块为我们提供了以逻辑方式组织代码的灵活性。
要将一个模块的功能用于另一个模块,我们必须导入特定的模块。
例
在此示例中,我们将创建一个名为file.py的模块,其中包含一个函数func,其中包含用于在控制台上打印某些消息的代码。
让我们创建名为file.py的模块。
#displayMsg prints a message to the name being passed. def displayMsg(name) print("Hi "+name);
在这里,我们需要将这个模块包含到我们的主模块中,以调用名为file的模块中定义的方法displayMsg()。
在我们的python代码中加载模块
我们需要在python代码中加载模块以使用它的功能。Python提供了两种类型的语句,如下所述。
Import 声明
from-import语句
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
如果我们事先知道要从模块导入的属性,那么from ... 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中,变量与两种类型的范围相关联。模块中定义的所有变量都包含全局范围,除非或直到在函数中定义它。
函数内定义的所有变量都包含仅限于此函数本身的局部范围。我们无法全局访问本地变量。
如果使用两个不同的范围(即local和global)定义了两个具有相同名称的变量,那么优先级将始终赋予局部变量。
请考虑以下示例。
例
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源文件。
ITEmployees.py
def getITNames(): List = ["John", "David", "Nick", "Martin"] return List;
3.同样,再创建一个名为BPOEmployees.py的python文件,并创建一个函数getBPONames()。
4.现在,我们在第一步中创建的Employees目录包含两个python模块。要使这个目录成为一个包,我们需要在这里再包含一个文件,即__init__.py,它包含此目录中定义的模块的import语句。
__init__.py
from ITEmployees import getITNames from BPOEmployees import getBPONames
5.现在,Employees目录已成为包含两个python模块的包。在这里我们必须注意,我们必须在目录中创建__init__.py以将此目录转换为包。
6.要使用Employees包中定义的模块,我们必须在python源文件中导入它。让我们在我们的主目录(/ home)中创建一个简单的python源文件,该文件使用此包中定义的模块。
Test.py
import Employees print(Employees.getNames())
输出:
['John','David','Nick','Martin']
我们可以在包中包含子包。我们可以根据应用要求将包嵌套到任何级别。
下图显示了应用程序库管理系统的目录结构,其中包含三个子程序包:Admin,Librarian和Student。子包包含python模块。