课程首页 › 第7章 › 第44课

第44课 变量的作用域

第7章 函数拥有巨大的能力· 知识点:函数 · 原书 7.6

依次单击菜单栏Run→Run Module选项来运行程序,程序运行结果如下:

最大值是

:96

函数的功能是找出nums中的最大值并返回。

①创建一个变量maxNum,初始值为0。

②通过for num in nums遍历里面的数字。

③如果num>maxNum,将num赋值给maxNum,这样就保证了maxNum的值是最大的。

④遍历结束后,将maxNum作为返回值。

在主程序中通过maxNum=max([34,32,45,67,23,84,32,96,13,94,44])调用max函数,将列表参数[34,32,45,67,23,84,32,96,13,94,44]传入函数,将函数返回的最大值赋给主程序的maxNum。此时主程序的maxNum就是这串数字的最大值了。

注意

这里函数max()中的maxNum和主程序中的maxNum可不是同一个maxNum。

在求最大值的函数中,变量maxNum就是最大值,那么在主程序中为什么不直接输出函数中的maxNum,而是要在主程序中再创建一个maxNum呢?

插图

遇到疑惑,我们尝试直接输出maxNum:

插图

依次单击菜单栏Run→Run Module选项来运行程序,程序运行结果报错了:

NameError:name'maxNum'is not defined

意思是名称maxNum没有被定义,程序找不到maxNum。

在主程序中将maxNum直接打印出来,但是程序却提示我们变量maxNum没有定义。这就很奇怪了,函数中明明定义了maxNum。

为什么会给出这样的提示呢?

插图

一起来学习变量的两种作用域:局部变量和全局变量。

局部变量

在求最大值的函数中,第一个maxNum称为局部变量,它的作用域是函数内部,出了函数就没人认识它了。所以我们在主程序中使用它会报错。

全局变量

全局变量在主程序中定义,不仅可以在主程序中访问它,在函数中也可以访问它。我们来尝试一下。

插图

程序运行结果如下:

我是主程序中定义的变量

乘法的结果为:

在程序中,tip是在主程序中定义的全局变量,并且tip指向了“我是主程序中定义的变量”。

我们在函数中并没有定义tip变量,但是可以在函数中使用变量,打印tip变量指向的对象内容。

同时,我们可以在函数中修改tip的值。

同名的局部变量和全局变量

插图

程序运行结果如下:

在函数中修改值

乘法的结果为

:

我是主程序中定义的变量

在主程序中定义了全局tip变量,并且将变量指向了”我是主程序中定义的变量”,全局变量能够在函数中访问到。

在函数中看上去是修改全局变量tip的值,将tip重新指向“在函数中修改值”,在函数中打印tip的值,因而打印出了“在函数中修改值”。

在主程序中打印tip的值,依然打印出了在主程序中定义的值“我是主函数中定义的变量”。这是为什么呢?

插图

这是因为我们在函数内创建tip的时候,不是修改了主程序的全局变量tip,而是重新创建一个局部变量tip。它们是完全不同的变量,只是看上去名字一样而已。

强制为全局变量

在函数中,修改全局变量tip指向的值,Python就会重新创建一个局部变量,而没有使用全局变量。如果我们就是要在函数中修改全局变量的值,要怎么办呢?

我们可以使用Python中的global关键字来实现。

插图
插图

程序运行结果如下:

在函数中修改值

乘法的结果为

:

在函数中修改值

程序中使用global关键字将tip强制为全局变量,所以在函数中修改全局变量tip,Python没有重新创建一个局部变量,而是修改了主程序中定义的全局变量。

函数能量回收

学习内容总结:

(1)通过函数名字参数语法创建自定义的函数。

def(…)

(2)通过函数名参数调用函数。

(3)调用有一个或多个参数的函数。

(4)函数通过return返回返回值。

(5)变量作用域(局部变量和全局变量)。

函数能量小挑战

(1)定义一个函数来向家人传达节日祝福。

(2)在上一个函数的基础上,加入一个参数,可以通过参数控制向不同家庭成员传达祝福。

(3)在上一个函数的基础上,再加入一个参数,可以通过参数控制向不同家庭成员传达不同节日的祝福。

(4)再定义一个函数,通过关键字参数的形式接收各门课程期末考试的成绩,并计算总分。

(5)班上有3位同学,分别是“奇奇果”“美美果”“聪聪果”。老师要统计班上同学的家庭联系电话、家庭住址,你编写一个函数帮老师统计吧。函数的参数个数可以自己定义,返回值可以决定是否需要。

(6)指出以下代码中哪些是局部变量,哪些是全局变量。

插图

第8章 类与对象的奥秘

插图

我们学习了如何使用数据结构来组织数据,如何用函数来组织程序代码。本章我们要学习中的类和对象,这是一种核心思想!

Python