首页
学习
活动
专区
工具
TVP
发布

如何理解Python中的乐高积木

The best way to learn a programming language is to write a lot of code and read a lot of code.

我们的程序很快就会变得越来越大,越来越复杂。需要一些方法把它们分成较小的部分进行组织,这样更易于编写,也更容易明白。

要把程序分解成较小的部分,主要有3种方法。函数(function)就像是代码的积木,可以反复地使用。利用对象(object),可以把程序中的各部分描述为自包含的单元。模块(module)就是包含程序各部分的单独的文件。

在这一篇中,我们将学习函数,后面两篇会讨论对象和模块。学习完这些知识,我们就具备了所需要的全部基本工具,可以开始使用图形和声音并且创建游戏了。

乐高积木-函数

最简单地讲,函数就是可以完成某个工作的代码块。这是可以用来构建更大程序的一个小部分。可以把这个小部分与其他部分放在一起,就像乐高积木搭房子一样。

创建一个积木

创建或定义函数要使用Python的def关键字。然后可以利用函数名来使用或调用这个函数。下面先来看一个简单的代码例子,它首先定义了一个函数,然后使用这个函数。这个函数会在屏幕上打印一个邮件地址。

第1行中,我们使用def关键字定义了一个函数。在函数名(printMyAddress)后面有一对括号“( )”,然后是一个冒号:

后面很快就会解释这个括号做什么用。冒号告诉Python接下来是一个代码块,这个之前讨论的for循环、while循环和if语句中的一样。

下面我们来看看这个函数运行步骤:

从这里开始。这是主程序的开始。

调用函数时,跳到函数中的第一行代码。

执行函数中的每一行代码。

函数完成时,从离开主程序的那个位置继续执行。

注意:

def中的代码块并不是主程序的一部分,所以程序运行时,它全跳过这个def代码块,从def代码块以外的第一行代码开始运行。

实际上,就像你在拼搭一个房子,需要用到某个名字为printMyAddress()的横梁积木时,那么你就要找出(写出)printMyAddress()积木名,它就会供你所有了。

使用积木

就像上述说的那样,当你找出(写出)printMyAddress()积木名,这样的操作就说明要运行这个名为printMyAddress()函数的代码了。当然,如果我们定义了一个函数,但是从来都没有使用它时,这个函数块内的代码是永远不会运行的,因为你根本就从没拿过这个积木来搭建你的房子。

使用(调用)函数时要使用函数名和一对括号。当然,这个括号里还能包含一些东西,或者什么也没有。

我们看看运行刚才的那个例子,你会看到这样的结果:

上述的结果我们也可以不用函数来得出,如下:

那为什么要自找麻烦使用函数来让问题更复杂呢?

其实我们使用函数的主要原因是,一旦定义了函数,就可以通过调用反复地使用。所以如果我们想把地址打印5次,可以这样来做:

输出将是:

你也可能会说,用之前学习的循环也能做出同样的事情。

是的,对于这种循环做同样的事情,for循环或while循环是强项,但如果我们希望在程序的不同位置打印地址,而不是全部都一次完成,循环就实现不了了。而这种像积木一样的函数,只要你制作好一块积木后,无论在什么时候你想用它时,只需要找出(写出)它的名字,就可以直接使用。

当然,学习使用函数还有一个原因,每次函数运行时可以让它有不同的表现。下面我们将会学习到。

向函数传递参数

刚刚我们说过,使用(调用)函数时要使用函数名和一对括号。当然,这个括号里还能包含一些东西,或者什么也没有。

现在来看括号做什么用:它用来传递参数。在编程中,参数这个词是指你交给函数的一条信息。我们把这称为:你向函数传递参数。

单个参数的函数

假设你希望对你的所有家庭成员使用这个地址打印函数。所有人的地址都是一样的,但是每一次人名会有所不同。不能在函数中把人名硬编码写成Warren Sande,你可以建立一个变量。调用函数时将这个变量传递到函数。

我们将上面打印地址的函数修改一下,使用一个对应人名的参数。参数是有名字的,就像其他变量一样,我们把这个变量命名为someName。代码如下:

运行代码,你会得到期望的结果:

这看上去与第一个程序(没有使用参数)得到的输出完全相同。不过,我们每次用不同方式打印地址,比如:

现在每次调用函数时输出都不同。人名会变,因为我们每次都向函数传入了不同的人名。

注意,我们向函数传入什么值,函数中就会使用什么值,并作为地址的人名部分打印出来。

有多个参数的函数

如果每次函数运行时有多个信息不同,比如要向街道上的所有人发信,每一次街道门牌号都不相同,这就需要多个参数了。

现在我们来看一个带两个参数的例子。在这个基础上,你可以根据具体需要为程序中的函数增加参数。

要向街道上的每个人发送信,我们的地址打印函数就需要两个参数:一个对应的人名,另一个是对应的门牌号。如下这个函数代码:

它的运行结果如下:

使用多个参数时,要用逗号来分隔,就像列表中的元素一样,这就引入了下个话题……

多少参数较为合适

前面说过,想向函数传递多少参数就可以有多少个参数。这一点不假,但是如果你的函数有超过5到6个参数,可能就应该考虑采用别的做法了。一种做法是把所有参数收集到一个列表中,然后把这个列表传递到函数。这样一来,就只是传递一个变量(列表变量),只不过其中包含有一组值。这样可以让你的代码更易读。

有返回值的函数

目前为止,函数只是为我们做一些工作。不过函数的一个突出作用是:它们还可以向你发回一些东西。

我们已经知道,可以向函数发送信息(参数),不过函数还可以向调用者发回信息。从函数返回的值称为结果(result)或返回值(return value)。

返回一个值

要让函数返回一个值,需要在函数中使用Python关键字return。下面给出一个例子:

这会把值taxTotal发回到调用这个函数的程序部分。

不过发回的这个值时,它会去哪里呢?返回值会回到调用这个函数的代码。看下面的例子,在IDLE输入下面代码:

运行后,在IDLE输入下面代码,得出结果如下:

calculateTax函数会返回一个值:10.8108,这个值将赋给totalPrice。

在上面的这个例子中,函数会运行,计算出税后的总价格。

下面我们来建立一个有返回值的函数程序。calculateTax()函数返回了一个值。向这个函数提供税前价格和税率,它会返回税后价格。我们把这个值赋给一个变量。所以不像前面那样只是使用函数的名,这里还需要一个变量和一个等号(=),然后是函数名。变量会赋为calculateTax()函数返回的结果。

运行这个程序,可以让用户输入价格,并得出总价格,如下结果:

如果程序必须要处理不同的税率,还可以修改下税率让用户来输入,你想到怎么修改了吗?

END

回顾

什么是函数。

什么是参数。

如何向函数传递一个参数。

如何向函数传递多个参数。

如何让函数向调用者返回一个值。

测试题

使用哪个关键字来创建函数?

如何调用函数?

如何向函数传递信息(参数)?

函数最好可以有多少个参数?

如何多函数返回信息?

动手试一试

编写一个函数,用大写字母打印你的名字,就像这样:

编写一个程序多次调用这个函数。

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

编写一个函数计算零钱的总面值,包括五分币、二分币和一分币。函数应当返回这些硬币的总面值。然后编写一个程序调用这个函数。程序运行时应当得到类似下面的输出:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180219G0COWO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券