函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02

前记:之前的笔记都比较啰嗦,今天试着用灰色引用部分精简重点,一是突出知识点,二是节省学习和复习的时间~

第十三章——函数

在这一章里, 我们要学习三个主要的方法:

(1)函数(function)

(2)对象(object)

(3)模块(module)

13.1 函数、调用函数

创建和使用函数:使用def关键字

(1)创建和使用函数:使用def关键字

函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第1张图片
要调用函数,只需直接用名字调用。运行结果略。

需要注意的是,def块中的代码不是主程序的一部分,所以运行到这里的时候,程序会跳过,直接运行下面“printMyAddress”部分,然后再跳回前面,重新运行这个函数。

(2)假如我们要循环打印五次地址,只需调用函数五次:

函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第2张图片

我们也可以使用循环、或者直接print出来这些输出,但是循环调用函数的优点是,它可以简便操作,另外它能实现循环不能实现的整洁格式。

此外,函数还有许多有用的特点:

13.3 向函数传递参数

在函数名的括号中间插入参数

如: functionName ( someArgument) : 

参数(argument)是指交给函数的一条信息(并不是争吵哦)。

怎么理解呢?比如说,一家人的地址都是一样的,只是名字不一样,这样我们写地址函数的时候,就可以只改变名字,其他地址都不变。仅改变的这个变量,就叫它“myName”吧:

函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第3张图片
传递参数,就是在函数的小括号里放上参数名

下面第一个运行结果,看似与之前的一样,但我们再次调用printMyAddress这个函数的时候,将myName参数换上不同的值,输出的也不一样:

函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第4张图片
运行结果

也就是说,我们向函数传递什么值,它就依据什么值给我们反馈。如果问题复杂些,我们将需要多个参数:

13.4 有多个参数的函数

用逗号隔开参数;

假如参数过多,可以使用列表呈现。

假如说我们要送信,除了要知道名字,还得知道门牌号,这时候就需要在printMyAddress里设置两个参数:

函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第5张图片
设置多个参数
函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第6张图片
运行结果,调用函数并传递了多个参数

注:假如参数太多(超过5~6个参数),就可以考虑将其放到列表中使用,这样可以使代码更整洁、更易读。

13.5 返回值的参数

使用return 语句来返回值

刚刚我们一直向函数输入值,但其实函数还可以给我们输出结果(result)或结果值(return value),下面给出一个例子:


使用return关键字返回值
也可以在另一个表达式,或创建变量,在变量中返回值

13.6 变量作用域

局部变量与全局变量的概念

程序之中,使用变量的部分称为“作用域”,作用域有全局和局部之分:

(1)局部变量:就是函数内部的变量。

为了更好地理解局部变量,下面的例子将会在函数外部打印一个局部变量:

函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第7张图片
这里设置了局部变量price,并在第二个print尝试打印
函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第8张图片
第二个print报错,证明price只在函数运行中才有存在

(2)全局变量(global variable):函数主程序部分的变量。

为了便于理解全局变量,在函数主体,我们尝试打印全局变量my_price:

函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第9张图片
代码
函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第10张图片
运行结果,在函数内、外都能打印全局变量

好的,道理我懂了,但假如我要在函数内改变全局变量,会发生什么变化?

那么我们就写一个全局变量my_price,在函数内设定为10000,看会发生什么结果:

函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第11张图片
运行代码
函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第12张图片
运行结果,函数内变为10000,函数外不变

为什么同为全局变量,一个变为10000,另一个却保持不变?

变量是“一个萝卜一个坑”没错,之所以有两个输出,是因为函数内的全局变量变化的时候,python给它安了一个新的变量,暂时存储了变化后的值,为的是防止函数无意改变了全局变量。

13.7 强制为全局

使用global 语句,将函数内的变量强制变为全局变量

当我们确实需要将全局变量通过函数改变的时候,可以这样使用global实现:

函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第13张图片
使用global在函数内声明全局变量
函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第14张图片
运行结果

13.8 关于变量命名的一些建议

强烈建议不要将局部变量和全局变量设为同一个名字,虽然不会报错,但容易引起混乱和错误。


你学到了什么?

(1)什么是函数

(2)什么是参数(argument实参,parameter形参)

(3)如何向函数传递一个/多个参数

(4)如何让函数返回值

(5)变量的作用域是什么;什么是局部变量和全局变量

(6)如何在函数中使用全局变量


练习题

(1)编写一个函数,用大写字母打印英文名字,并多次调用函数:

函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第15张图片
这里for循环下面不用写print,直接调用,否则会出现一个“none”
函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第16张图片
实现结果

(2)建立一个函数,可以打印全世界任何人名、地址、街道、城市、州或省,还包含它的邮政编码和国家。(提示:需要七个参数,可以列为单独的参数,也可以作为一个列表)

函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第17张图片
函数代码,有些城市没有省份概念,所以省份用了if实现
传递参数
函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第18张图片
实现结果

(3)编写一个函数并调用:计算零钱总面值,用户可以输入五分、两分和一分硬币的数量,函数能够输出最终结果。

函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第19张图片
代码
函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02_第20张图片
实现结果

小结

有了上一章的铺垫,这节课学起来我觉得是得心应手的。这章学到的东西也许比较简单,但不代表它不重要,我觉得是一个比较适合初学者入门的函数课程。继续加油~

你可能感兴趣的:(函数就像小积木——父与子的编程之旅第十三章学习笔记:函数 2018-08-02)