Python 模块

Python 模块

函数是一段有组织、可重用的代码块,用于执行一个单独且相关的操作。函数能够为您的应用程序提供更好的模块性,以及高度的代码重用性。

Python中的模块的概念进一步增强了模块化。您可以一起定义多个相关函数并加载所需的函数。模块是一个包含函数、类、变量、常量或任何其他Python对象定义的文件。该文件的内容可以提供给任何其他程序使用。Python使用import关键字来实现这个目的。

示例

import math
print ("Square root of 100:", math.sqrt(100))

它将产生以下的 输出 -

Square root of 100: 10.0

内置模块

Python的标准库附带了许多模块。它们被称为内置模块。其中大多数内置模块都是用C语言编写的(因为Python的参考实现是C语言),并且预编译成库。这些模块提供了诸如特定于系统的操作系统管理、磁盘IO、网络等有用的功能。

下面是一些选择的内置模块列表:

编号 名称与简要描述
1 os 该模块提供了一种统一的接口,用于执行一些操作系统功能。
2 string 该模块包含一些用于字符串处理的函数。
3 re 该模块提供了一组强大的正则表达式功能。正则表达式(RegEx)允许对字符串进行强大的搜索和匹配。
4 math 该模块实现了一些浮点数的数学运算。这些函数通常是对平台C库函数的简单封装。
5 cmath 此模块包含一些用于复数的数学运算。
6 datetime 此模块提供处理日期和一天内时间的函数。它封装了C运行时库。
7 gc 此模块提供对内置垃圾收集器的接口。
8 asyncio 此模块定义了用于异步处理所需的功能。
9 Collections 此模块提供了高级容器数据类型。
10 Functools 此模块具有高阶函数和可调用对象的操作。在函数式编程中有用。
11 operator 标准运算符对应的函数。
12 pickle 将Python对象转换为字节流,反之亦然。
13 socket 底层网络接口。
14 sqlite3 使用SQLite 3.x的DB-API 2.0实现。
15 statistics 数学统计函数。
16 typing 支持类型提示。
17 venv 创建虚拟环境。
18 json 将 JSON 格式进行编码和解码。
19 wsgiref WSGI 工具和参考实现。
20 unittest Python 的单元测试框架。
21 random 生成伪随机数。

自定义模块

任何扩展名为.py并包含Python代码的文本文件都可以看作是一个模块。它可以包含一个或多个函数、变量、常量以及类的定义。通过import语句,来自模块的任何Python对象都可以在解释器会话或另一个Python脚本中使用。模块还可以包括可运行的代码。

创建一个模块

创建一个模块就是使用任何编辑器保存Python代码。让我们将以下代码保存为 mymodule.py

def SayHello(name):
   print ("Hi {}! How are you?".format(name))
   return

你现在可以在当前的Python终端中导入mymodule。

>>> import mymodule
>>> mymodule.SayHello("Harish")
Hi Harish! How are you?

您还可以在另一个Python脚本中导入一个模块。将以下代码保存为example.py

import mymodule
mymodule.SayHello("Harish")

在命令终端中运行此脚本

C:\Users\user\examples> python example.py
Hi Harish! How are you?

import 语句

在Python中, import 关键字被提供用于从一个模块中加载一个Python对象。该对象可以是一个函数、类、变量等。如果一个模块包含多个定义,所有的定义都会加载到命名空间中。

让我们将以下代码保存在一个名为 mymodule.py 的文件中,该文件包含三个函数。

def sum(x,y):
   return x+y

def average(x,y):
   return (x+y)/2

def power(x,y):
   return x**y

导入 mymodule 模块的语句将此模块中的所有函数加载到当前命名空间中。导入的模块中的每个函数都是此模块对象的属性。

>>> dir(mymodule)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'average', 'power', 'sum']

要调用任何函数,请使用模块对象的引用。例如,mymodule.sum()。

import mymodule
print ("sum:",mymodule.sum(10,20))
print ("average:",mymodule.average(10,20))
print ("power:",mymodule.power(10, 2))

它将产生以下 输出

sum:30
average:15.0
power:100

from ... import 语句

import 语句将在当前名称空间加载模块的所有资源。可以使用此语法从模块中导入特定对象。例如,

mymodule 中有三个函数,但在以下可执行脚本 example.py 中只导入了两个。

from mymodule import sum, average
print ("sum:",sum(10,20))
print ("average:",average(10,20))

它将产生以下输出 −

sum: 30
average: 15.0

注意,函数不需要通过模块的名称来调用。

使用from...import *语句

还可以通过使用以下import语句将模块中的所有名称导入当前命名空间。

from modname import *

这提供了一种简单的方法,可以将一个模块中的所有项目导入到当前命名空间中;但是,应该谨慎使用此语句。

import ... as 语句

您可以为导入的模块指定一个别名。

from modulename as alias

调用函数时应在前缀中加上 别名

看以下 示例

import mymodule as x
print ("sum:",x.sum(10,20))
print ("average:", x.average(10,20))
print ("power:", x.power(10, 2))

模块属性

在Python中,一个模块是一个模块类的对象,因此具有属性。

以下是模块的属性:

  • file返回模块的物理名称。

  • package返回模块所属的包。

  • doc返回模块顶部的文档字符串(如果有的话)。

  • dict返回模块的整个作用域。

  • name返回模块的名称。

示例

假设以下代码保存为 mymodule.py

"The docstring of mymodule"
def sum(x,y):
   return x+y

def average(x,y):
   return (x+y)/2

def power(x,y):
   return x**y

将下面的英文翻译成中文,不解释,保留HTML格式:

让我们通过在以下脚本中导入mymodule来检查其属性−

import mymodule

print ("__file__ attribute:", mymodule.__file__)
print ("__doc__ attribute:", mymodule.__doc__)
print ("__name__ attribute:", mymodule.__name__)

它将产生以下的 输出

__file__ attribute: C:\Users\mlath\examples\mymodule.py
__doc__ attribute: The docstring of mymodule
__name__ attribute: mymodule

name 属性

Python 模块的__name__属性非常重要。让我们更详细地探讨一下。

在交互式 Shell 中,__name__属性返回 ‘main

>>> __name__
'__main__'

如果您在解释器会话中导入任何模块,则该模块的__name__属性返回模块的名称。

>>> import math
>>> math.__name__
'math'

从Python脚本内部,__name__属性返回’main

#example.py
print ("__name__ attribute within a script:", __name__)

在命令终端中运行此命令-

__name__ attribute within a script: __main__

该属性允许将Python脚本用作可执行文件或模块。与C++、Java、C#等不同,在Python中,没有main()函数的概念。扩展名为.py的Python程序脚本可以包含函数定义和可执行语句。

保存 mymodule.py 文件,并使用以下代码:

"The docstring of mymodule"
def sum(x,y):
   return x+y

print ("sum:",sum(10,20))

你可以看到sum()函数是在定义它的同一脚本中调用的。

C:\Users\user\examples> python mymodule.py
sum: 30

现在让我们在另一个脚本中导入这个函数

example.py .

import mymodule
print ("sum:",mymodule.sum(10,20))

它将产生以下 输出

C:\Users\user\examples> python example.py
sum: 30
sum: 30

输出“sum:30”出现了两次。一次是在导入mymodule模块时,导入的模块中的可执行语句也会运行。第二次输出来自调用脚本,即 example.py 程序。

我们希望的是当导入一个模块时,只导入函数,不运行可执行语句。可以通过检查__name__的值来实现。如果是__main__,表示正在运行而不是被导入。有条件地包含可执行语句,比如函数调用。

mymodule.py 中添加 if 语句,如下所示-

"The docstring of mymodule"
def sum(x,y):
   return x+y

if __name__ == "__main__":
   print ("sum:",sum(10,20))

现在如果你运行 example.py 程序,你会发现输出的和为30只出现一次。

C:\Users\user\examples> python example.py
sum: 30

reload()函数

有时候,在Python的交互式解释器会话中工作时,您可能需要重新加载一个模块。

假设我们有一个名为test.py的测试模块,并且有以下函数:

def SayHello(name):
   print ("Hi {}! How are you?".format(name))
   return

我们可以从Python提示符中导入该模块并调用其函数,如下所示:

>>> import test
>>> test.SayHello("Deepak")
Hi Deepak! How are you?

然而,假设您需要修改SayHello()函数,比如 –

def SayHello(name, course):
   print ("Hi {}! How are you?".format(name))
   print ("Welcome to {} Tutorial by TutorialsPoint".format(course))
   return

即使您编辑并保存test.py文件,加载到内存中的函数也不会更新。您需要使用imp模块中的reload()函数重新加载它。

>>> import imp
>>> imp.reload(test)
>>> test.SayHello("Deepak", "Python")
Hi Deepak! How are you?
Welcome to Python Tutorial by TutorialsPoint

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程