【Python教程】五、如何理解Python的函数?(二)

更多教程请私信~

来源:思路实验室 

作者:室长

大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。

在上一期我们初步认识了函数,大家也动手写出了自己的第一个函数。可以看到,函数就是一定的操作过程,那我们也可以把一些函数按照一定顺序来组装起来,形成更高级的函数。其实聪明的同学已经发现了,我们在上一期所写的函数本身就是由其他函数组成的:

在我们的“装冰箱”函数中,我们使用到了内置函数——print函数。print函数是把一段文字打在屏幕上,而通过我们的组合与设置参数,我们通过“装冰箱”函数成功地实现了把某物装进冰箱的过程打在屏幕上的高级功能。

那我可不可以把“装冰箱”的函数组合组合,形成一个更高级的函数呢?当然没问题!

我们这次要分别将大象和骆驼装进冰箱:

这次室长给新的函数起名为“双倍装冰箱”,同时为我们要被装的两个“什么玩意”预留了两个参数坑位。同时这次在调用函数时直接把值(“大象”,“骆驼”)作为实参填入了参数坑位中。来看看结果如何:

完全没有问题。

那在这个过程中解释器做了什么呢?我们把“双倍装冰箱”的第一个参数坑位填入了“大象”,第二个坑位填入了“骆驼”,解释器把“大象”作为“第一个倒霉蛋”的值,传递给“装冰箱”函数的唯一一个参数坑位,成为“什么玩意”的值,再嵌入到句子里,最后被打到屏幕上,同样“骆驼”也是同一个流程。

室长知道理解起来很难,但是从流程上来看,这传来传去的过程像不像工厂里的流水线?从原料库转到第一个车间,再转到第二个车间,以此类推,直到最后成型。而每个单独的生产线产生的零件再进行组装就能形成完整的产品。反过来看,如果需要造一件复杂的产品,就先把它分成多个独立的零部件,再进行组合。而函数就是这样,把一个复杂的问题分成若干个小问题,用简单的函数解决这些小问题,再把这些函数整合,最后就能实现解决问题的目的。

说到工厂,工厂毕竟是要生产东西的,但是我们刚才的代码里好像把文字打在屏幕上之后就完了,这就相当于工厂工人辛辛苦苦上了班结果什么都没生产出来。如果是搞宣传搞摆拍什么的其实无所谓,但如果真靠这个吃饭的肯定就完了。

我们再来举个例子,这次举一个数学的:

我们新定义一个“二的平方”的函数,注意这里室长没为函数设置参数,这是完全可以的,但要注意,我们在调用时不能因为没有参数就把括号给省略。因为只写函数名的话是在引用函数,解释器会认为你是提了一句这个函数的名字而不是让这个函数去进行操作。

调用一下“二的平方”,可以看到,解释器已经把结果(4)打到了屏幕上。那如果我想把这个结果存入到变量中呢?

怎么是None?不是明明是4嘛?

函数确实算出来了a=4,但是你没有让函数告诉你你要的结果是啥,函数只知道你让它把2×2的结果打在屏幕上。这就好比在考试的时候你给同桌扔了个小纸条,上边写着“会不会做第四题?”,然后看到同桌在疯狂地写草稿纸,然后写了一个小纸条扔回给你,你满心期待地打开小纸条,发现上边写了一个 “会”字。(传小纸条不是好行为大家不要学习!)

所以我们在定义函数的时候应该告诉函数我们需要函数给我们什么。而函数给我们的东西叫返回值,英文是return。在这个函数中,我们需要函数返回a的值。

我们把返回值加入到代码中:

这下结果符合了我们的预期。

另外我们刚才讲到,调用函数必须用括号,否则是引用,那么我们写一个例子来直观地看一下调用和引用有什么区别:

可以看到,变量a是“二的平方”函数运行的结果,而变量b……这是个什么玩意?

<function 二的平方 at 0x0000028812873E20>,这里的function指的是函数,后边的“二的平方”就是函数名,at 0x0000028812873E20 指的是这个函数的地址位于0x0000028812873E20。也就是说这个变量b的值是关于“二的平方”这个函数的信息而非这个函数的返回值。而我们“b=二的平方”这一行代码相当于给“二的平方”这个函数取了一个别称,这一点是不是和变量里多个变量名对应同一个变量值很像?

因此我们在后边以“b”为函数名对“二的平方”进行调用(调用还是要记得加括号!)并将返回值赋值给变量c,得到了变量c=4的结果。

这一期我们了解了函数嵌套的意义和作用,了解了嵌套过程中参数的传递,也认识了函数的返回值。我们把函数比喻成一个工厂,原料进去,产品出来。但如果我们把工厂的原料换成它不需要的东西,比如汽车加工厂本身需要橡胶,我们却给了它香蕉,那会发生什么呢?请关注下一期:如果Python的数据类型

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值