模块

模块是一种文件,其中可包含变量、语句和函数等。模块包括Python内置模块、第三方模块、自定义模块和窗体模块等。[大谦MATLAB,dqmatlab点com]

内置和第三方模块

【MATLAB】

MATLAB官方发布了总包和大量的工具箱,包括数学类、图形类、图像处理类和各种专业相关的工具箱,使用它们可以完成各行各业相关的数据处理任务。除了官方发布的工具,很多大学、个人、公司等也发布了很多第三方工具箱。如果愿意,你也可以发布自己的工具箱。

【Python】

介绍内置模块的函数时介绍了math模块、cmath模块和random模块。这几个都是Python内置的模块,安装Python软件时它们就在了,不需要另外安装。

除了Python内置的模块外,Python还有很多第三方模块,如有名的Numpy, Pandas和Matplotlib等,都是第三方模块。使用第三方模块,我们可以轻松地站在前人肩膀上,大幅提高工作效率。使用第三方模块需要首先进行安装。

脚本式自定义模块

脚本式自定义模块中没有函数,而是用多条语句定义连续的动作序列。第4章介绍流程控制时代码都是写在命令窗口中,以命令行的方式运行的。如果把代码写在脚本文件中,保存为文件,就是脚本式自定义模块。

【MATLAB】

脚本式M文件是将执行计算或绘图的语句直接写入模块,没有function关键字,而是按先后顺序处理一系列动作。

在MATLAB中新建M文件,保存为s01.m。

code.matlab
score=input('请输入考试分数:')
  if score>=90
    a='优秀。'
  elseif score>=80
    a='良好。'
  elseif score>=70
    a='中等。'
  elseif score>=60
    a='及格。'
  else
    a='不及格。'
  end

单击功能区的绿色三角形按钮,运行脚本,在命令窗口输出:

code.matlab
>> script
请输入考试分数:

输入85,回车,显示:

code.matlab
score =
    85
a =
    '良好。'

【Python】

用Python创建脚本式自定义模块实现上例相同的功能。在Python IDLE中新建脚本文件,保存为s01.py。代码如下所示:

code.python
sc= int(input('请输入一个数字:'))
if(sc>=90):
    print('优秀')
elif(sc>=80):
    print('良好')
elif(sc>=70):
    print('中等')
elif(sc>=60):
    print('及格')
else:
    print('不及格')

单击“Run”菜单中的“Run Module”选项,在Python IDLE Shell窗口显示:

code.python
= RESTART: …/Samples/ch15/s01.py
请输入一个数字:

输入85,回车,显示:

code.python
良好

函数式自定义模块

函数式自定义模块中定义有函数,可以在其他模块中使用它们。第14章编写的带函数的脚本文件都是函数式自定义模块,请参阅。

类模块

MATLAB和Python中都可以创建类模块,类模块用代码描述现实世界里面的对象。有类以后,就可以生成类的实例,即对象,它是现实世界里面的对象基于类代码的抽象、模拟和简化。限于篇幅,这里不展开介绍。

变量的作用范围

根据变量的作用范围,变量可分为局部变量和全局变量。局部变量是定义在函数内部的变量,只在对应函数内部有效。全局变量是用global关键字声明的变量。全局变量可在整个模块范围内进行访问。

【MATLAB】

下面定义1个f1函数,函数中变量v为局部变量,它的作用范围就在函数f1内部。该文件保存为s02.m。

code.matlab
v=10  %给变量v赋值10
f1()  %调用f1函数
v
function f1()  %函数f1,给局部变量v赋值20
    v=20;
end

单击功能区的绿色三角形按钮,运行脚本,在命令窗口输出:

code.matlab
>> s02
v =
    10
v =
    10

可见,调用f1函数前后变量v的值没有改变,即f1函数中设置变量v的值只在函数内部有效。

下面在f1函数和f2函数中用global关键字将变量v声明为全局变量,修改它的值,然后查看它的作用范围。该文件保存为s03.m。

code.matlab
v=10
f1(20)  %调用函数f1
v=f2()  %调用函数f2
function f1(a)
  global v  %用global关键字将变量v声明为全局变量
  v=a;  %修改v的值为a
end
function r=f2()
  global v  %用global关键字将变量v声明为全局变量
  r=v;  %输出变量v的值
end

单击功能区的绿色三角形按钮,运行脚本,在命令窗口输出:

code.matlab
>> s03
v =
    10
v =
    20
v =
    20

可见,由于f1函数中变量v声明为全局变量,调用f1函数前后v的值发生了改变。f2函数中变量v因为声明为全局变量,可以直接使用,并且它的值为变量的当前值。

【Python】

下面定义1个f1函数,函数中变量v为局部变量,它的作用范围就在函数f1内部。该文件保存为s02.py。

code.python
v=10  #给变量v赋值10
print(v)
def f1():  #函数f1,给局部变量v赋值20
    v=20
f1()  #调用f1函数
print(v)

在Python IDLE文件脚本窗口,在"Run"菜单中单击"Run Module"选项,则IDLE命令行窗口显示下面的结果:

code.python
>>> =RESTART: …/Samples/ch15/s02.py
10
10

可见,调用f1函数前后变量v的值没有改变,即f1函数中设置变量v的值只在函数内部有效。

下面在f1函数中用global关键字将变量v声明为全局变量,修改它的值,然后查看它的作用范围。该文件保存为s03.py。

code.python
v=10
print(v)
def f1():
    global v  #用global关键字将变量v声明为全局变量
    v=20  #修改v的值为20
def f2():
    print(v)  #输出变量v的值
f1()  #调用函数f1
print(v)
f2()  #调用函数f2

在Python IDLE文件脚本窗口,在"Run"菜单中单击"Run Module"选项,则IDLE命令行窗口显示下面的结果:

code.python
>>> =RESTART: …/Samples/ch15/s03.py
10
20
20

可见,由于f1函数中变量v声明为全局变量,调用f1函数前后v的值发生了改变。而且在其他函数中也可以使用全局变量。

变量的存活期

变量的存活期代表变量保持其值的能力。局部变量的存活期从函数内部定义它开始到函数执行结束或变量被删除为止;全局变量的存活期从该变量被定义开始到程序运行结束或该变量被删除为止。

在MATLAB中有一种变量类型被称为persistent variable,即固定变量。固定变量类似C、Basic等语言中的静态变量,即可以保持变量的值。固定变量用persistent关键字声明,它具有以下特点:

• 只能用在函数中;

• 其他函数不能获取它们;

• 函数存在时MATLAB不将它们从内存中清除,所以变量能始终保留值;

如果清除了函数或编辑了该函数的M文件,则MATLAB会清除用于该函数的所有固定变量。

下面定义1个mysum函数,函数中变量s声明为固定变量,利用固定变量的特点对1到5进行累加求和。该文件保存为s04.m。

code.matlab
for i=1:5
  mysum(i)  %累加求和
end
function mysum(n)
  persistent s    %固定变量
  if isempty(s)    %初始化
    s=0;
  end
  s=s+n    %前步的累加和加上当前值,保持s的值
end

单击功能区的绿色三角形按钮,运行脚本,在命令窗口输出:

code.matlab
>> s04
s =
     1
s =
     3
s =
     6
s =
    10
s =
    15

输出了每步计算的累加和。可见,mysum函数中,变量s的值始终保持,即使超出了mysum函数的范围也保持。