《树莓派Python编程指南》——3.4 使用函数复用代码-阿里云开发者社区

开发者社区> 华章出版社> 正文
登录阅读全文

《树莓派Python编程指南》——3.4 使用函数复用代码

简介:

本节书摘来自华章计算机《树莓派Python编程指南》一书中的第3章,第3.4节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.4 使用函数复用代码

我们已经使用过一些函数,如print()和input()。这些都是Python内置函数。你还可以自己定义函数。第2章中你已经定义过自己的函数,这里我们来复习一下。看下这个:


e0af539cf7c69b92dc4abbf5fec9727856564c05

这段代码定义了一个名叫square(平方)的函数,然后使用这个函数计算了4的平方。使用它的时候需要在名字后面跟一个包含在小括号里的数字——我们称为参数。函数运行时,参数名(本例中是num)将会被赋值为你给定的数字。return语句可以出现在程序中的某个地方,用来给主程序返回数据。如果有多个return语句,Python将在第一次遇到return时返回。
你也可以创建包含多个参数的函数。例如,下面的程序就有一个函数需要两个参数并返回其中较大的一个。

<a href=https://yqfile.alicdn.com/e4e32549f0c7aef6c6961e7214bb86c41ec101bc.png
" >

至此为止,它们都工作地很好。然而如果需要在函数中改变了变量的值呢?看看下面的程序:


<a href=https://yqfile.alicdn.com/cae1a142976a4d5cbfac237cfc3cfd42af0c53f4.png" >


6ffb1ab42f52c5a5fd7decbe78acc2b9aee3b856

运行这段程序之前,先想一下运行结果。可以肯定的是,number_2将会是2,但number_1呢?它应该是1么?因为我们在主程序中给它赋值为1。还是2呢?因为我们把它传递给函数add_one()并在里面改变了它的值。
运行后,你会发现number_1是1。这是因为这一行:

<a href=https://yqfile.alicdn.com/09bd8037b8efb83d25a4c9be5145322752daf1bb.png
" >

你告诉Python不想让num继续保持原来的值(和number_1一样),而是给它一个加1后的新值。
然而,可变数据类型如列表、集合和对象就不一样了。如果它们中的一种数据类型传入函数并改变它,那么作为参数传入的原始值也会跟着变化。比如:

c1d834d208d4c16e7332b5777f35b42f713684cd

运行之后将得到:

<a href=https://yqfile.alicdn.com/80d59a103fd4fa8529b69928cb89b5ab8b6c073b.png
" >

通常情况下,这样做没有什么问题,但有时你并不想让作为参数传入的原始值发生变化。这种情况下,你需要使用copy.deepcopy(),不过首先你得导入copy模块。如果你把上个例子改为:

3acd480e2bd7176486f26e4defd8cf36e1c9098f

你将得到:

c7985d00810be63d4832bc2efb7830577692cbbe

可选参数
有时你需要创建这样一个函数,它有时候需要参数,有时候不需要。比如,你可能需要创建函数increment(),该函数接受两个参数并将它们相加。当只给一个参数时,该函数就把这个参数加上1。这时候你就可以使用默认值(本例中为1)作为参数:

fdbafff2cc6ac88e4ea402d2d6661d48dbeec545

这里唯一需要注意的就是可以省略的参数必须放在其他参数之后。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: