第8章 模块

第8章模块8.1模块概述模块的英文是Modules,可以认为是一盒(箱)主题积木,通过它可以拼出某一个主题的东西。这与第6章介绍的函数不同,一个函数相当于一块积木,而一个模块中可以包括很多函数,也就是很多积木,所以也可以说模块相当于一盒积木。在Python中,一个拓展名为“.py”的文件就称之为一个模块。通常情况下,我们把能够实现某一特定功能的代码放置在一个文件中作为一个模块,从而方便其他程序和脚...

第8章 模块

第8章 模块

8.1 模块概述

模块的英文是Modules,可以认为是一盒(箱)主题积木,通过它可以拼出某一个主题的东西。这与第6章介绍的函数不同,一个函数相当于一块积木,而一个模块中可以包括很多函数,也就是很多积木,所以也可以说模块相当于一盒积木。

在Python中,一个拓展名为“.py”的文件就称之为一个模块。

通常情况下,我们把能够实现某一特定功能的代码放置在一个文件中作为一个模块,从而方便其他程序和脚本导入并使用。另外,使用模块也可以避免函数名和变量名冲突。

经过前面的学习,我们知道对于Python代码可以写到一个文件中。但是随着程序不断变大,为了便于维护,需要将其分为多个文件,这样可以提高代码的可维护性。另外,使用模块还可以提高代码的可重用性。即编写好一个模块后,只要是实现该功能的程序,都可以导入这个模块实现。

8.2 自定义模块

在Python中,自定义模块有两个作用:一个是规范代码,让代码更易于阅读,另一个是方便其他程序使用已经编写好的代码,提高开发效率。

实现自定义模块主要分为两部分,一部分是创建模块,另一个部分是导入模块。

8.2.1 创建模块

创建模块时,可以将模块中相关的代码(变量定义和函数定义等)编写在一个单独的文件中,并且将该文件命名为“模块名 .py”的形式。

注意:创建模块时,设置的模块名不能是Python自带的标准模块名称。

实例01:创建计算BMI指数的模块

def fun_bmi(person,height,weight): '''功能:根据身高和体重计算BMI指数  person:姓名  height:身高,单位:米  weight:体重,单位:千克 ''' print(person"的身高:"str(height)"米\t体重:"str(weight)"千克") bmi=weight/(height*height)# 用于计算BMI指数,公式为:BMI=体重/身高的平方 print(person"的BMI指数为:" str(bmi))  # 输出BMI指数 # 此处省略了显示判断结果的代码def fun_bmi_upgrade(*person): '''功能:根据身高和体重计算BMI指数(升级版)  *person:可变参数该参数中需要传递带3个元素的列表,  分别为姓名、身高(单位:米)和体重(单位:千克) '''# 此处省略了函数主体代码

注意:模块文件的扩展名必须是“.py”。

8.2.2 使用import 语句导入模块

创建模块后,就可以在其他程序中使用该模块了。要使用模块需要以模块的形式加载模块中的代码,这可以使用import语句实现。import语句的基本语法格式如下:

import modulename[as alias]

其中,modulename为要导入模块的名称;[as alias]为给模块起的别名,通过该别名也可以使用模块。

下面将导入实例01所编写的模块bmi,并执行该模块中的函数。在模块文件bmi.py的同级目录下创建一个名称为mai.py的文件,在该文件中,导入模块bmi,并且执行该模块中的fun_bmi()函数,代码如下:

import bmi# 导入bmi模块bmi.fun_bmi("大白",1.80,130)# 执行模块中的fun_bmi()函数

执行上面的代码,运行结果如下。

大白的身高:1.8米 体重:130千克大白的BMI指数为:40.123456790123456

说明:在调用模块中的变量、函数或者类时,需要在变量名、函数名或者类名前添加“模块名.”作为前缀。例如,上面代码中的bmi.fun_bmi,表示调用bm i模块中的fun_bmi() 函数。

多学两招:

如果模块名比较长不容易记住,可以在导入模块时,使用as 关键字为其设置一个别名,然后就可以通过这个别名来调用模块中的变量、函数和类等。例如,将上面导入模块的代码修改为以下内容:

import bmi as m  # 导入bmi模块并设置别名为m

然后,在调用bmi 模块中的fun_bmi() 函数时,可以使用下面的代码:

m.fun_bmi("大白",1.80,130)# 执行模块中的fun_bmi()函数

使用import 语句还可以一次导入多个模块,在导入多个模块时,模块名之间使用逗号“,”进行分隔。例如,分别创建了bmi.py、tips.py 和 differenttree.py 3 个模块文件。想要将这3个模块全部导入,可以使用下面的代码:

import bmi,tips,differenttree

8.2.3 使用from...import 语句导入模块

在使用import 语句导入模块时,每执行一条import 语句都会创建一个新的命名空间(namespace),并且在该命名空间中执行与.py 文件相关的所有语句。在执行时,需在具体的变量、函数和类名前加上“模块名.”前缀。如果不想在每次导入模块时都创建一个新的命名空间,而是将具体的定义导入到当期的命名空间,这时可以使用from...import 语句。使用from...import 语句导入模块后,不需要在添加前缀,直接通过具体的变量、函数和类名等访问即可。

说明:命名空间可以理解我记录对象名字和对象之间对应关系的空间。目前Python的命名空间大部分都是通过字典(dict)来实现的。其中,key 是标识符;value 是具体的对象。例如,key 是变量的名字,value 则是变量的值。

from...import 语法格式如下:

from modelname import member

参数说明:

  • modelname:模块名称,区分字母大小写,需要和定义模块时设置的模块名称大小写保存一致。
  • member:用于指定要导入的变量、函数或者类等。可以同时导入多个定义,各个定义之间使用逗号“.” 分隔。如果想导入全部定义,也可以使用通配符号“*” 代替。

多学两招:在导入模块时,如果使用通配符“*” 导入全部定义后,想查看具体导入了哪些定义,可以通过显示dir() 函数的值来查看。例如,执行print(dir()) 语句后将显示类似下面的内容。

['__annotations__', '__builtins__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'm']

……

例如,通过下面的3 条语句都可以从模块导入指定的定义。

from bmi import fun_bmi# 导入bmi模块的fun_bmi函数from bmi import fun_bmi,fun_bmi_uparade  # 导入bmi模块的fun_bmi和fun_upgrade函数from bmi import *# 导入bmi模块的全部定义(包括变量和函数)

注意:在使用from...import 语句导入模块中的定义时,需要保证所导入的内容在当前的命名空间中是唯一的,否则将出现冲突,后导入的同名变量、函数或者会覆盖先导入的。这时就需要使用import语句进行导入。

实例02:导入两个包括同名函数的模块

创建两个模块,一个是矩形模块,其中包括计算矩形周长和面积的函数;另一个是圆形,其中包括计算圆形周长和面积的函数。然后在另一个Python文件中导入这两个模块,并调用相应的函数计算周长的面积。具体步骤如下:

(1)创建矩形模块,对应的文件名为rectangle.py,在该文件中定义两个函数,一个用于计算矩形的周长,另一个用于计算矩形的面积,具体代码如下:

def firth(width,height): '''功能:计算周长  参数:width(宽度)、height(高) ''' return(widthheight)*2def area(width,height): '''功能:计算面积  参数:width(宽度)、height(高) ''' return width * heightif __name__ == '__main__': print(area(10,20))

(2)创建圆形模块,对应的文件名称为circular.py,在该文件中定义两个函数,一个用于计算圆形的周长,另一个用于计算圆形的面积,具体代码如下:

import math # 导入标志模块mathPI = math.pi# 圆周率def girth(r): '''功能:计算周长  参数:r(半径) ''' return round(2 * PI * r ,2 )  # 计算周长并保留两位小数def area(r): '''功能:计算面积  参数:r(半径) ''' return round(PI * r * r ,2 )# 计算面积并保留两位小数if __name__ == '__main__': print(girth(10))

(3)创建一个名称为compute.py 的Python文件,首先导入矩形模块的全部定义,然后导入圆形模型的全部定义,最后分别调用计算矩形周长的函数和计算圆形周长的函数,代码如下:

from rectangle import *  # 导入矩形模块from circular import *# 导入圆形模块if __name__ == '__main__': print('圆形的周长为:',girth(10))# 调用计算圆形周长的函数 print('矩形的周长为:',area(10,20))# 调用计算矩形周长的函数

执行compute.py文件,将显示如下结果。

圆形的周长为: 62.83Traceback (most recent call last):  File "D:\python3.6.5\练习文件\main.py", line 11, in <module> print('矩形的周长为:',girth(10,20))# 调用计算矩形周长的函数TypeError: girth() takes 1 positional argument but 2 were given

从图中可

源文地址:https://www.guoxiongfei.cn/cntech/12290.html
0