暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python-35 之四 函数及递归

Rhonin晴朗台风天 2021-09-16
449

读前提示:这部分相对来说比较抽象,不用强迫自己一次能读懂。我会尽量用比较形象的表达,因为不止你,对我而言也是抽象的。所以别害怕,大家都是一样的。

一、函数理解

说到函数,大家首先想到的都是数学定义中的y=f(x),其实底层逻辑都是通用的,计算机中的函数也是一样样的。

来看看百度曰:函数概念含有三个要素:定义域x、值域y和对应法则f。函数指一个量随着另一个量的变化而变化,其中核心是对应法则f,它是函数关系的本质特征

举个栗子:f法则x*2,如:x=1,y=2,如:x=30,y=60。

也就是说,当我们提前设定了f法则,那么x就是输入,y就是输出,f也就是算法了。这不就是咱们一开始说的IPO嘛。

计算机的函数:函数是指一段可以直接被引用的程序或代码

那可能很多宝宝会问,为什么要整这么一出呢?这就涉及到代码的模块化了,因为百度曰:在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于利用函数,以减少重复编写程序段的工作量。 

毕竟写代码是很消耗脑力,存在秃头高风险的事情,如果函数能帮我们减负,不觉得很幸福吗?我们之前就说过写好一段通用代码,终身受用,何乐不为?

重复的事情就交给计算机吧,我们是程序设计师,不是代码工厂的流水线工人。


二、变量、固定函数、自定义函数、lambda函数

那咱们就正式进入函数辣。

以上四种代码,最终输出的都是"函数"这两个字。

我想让大家既看到不管白猫黑猫能抓老鼠就是好猫,也希望大家看到这四段代码背后的逻辑和区别。我认为这四段不同的代码,其实底层的逻辑是通用的,大家可以细细品味。

赋值语句变量a和自定义函数里的fact其实是一样的,都是咱们自定义叫啥。那固定函数print顾名思义就是只能叫这个名字,因为人家有固定用途,不让你随便乱起名,你叫了这个名字,那你就得按固定函数的固定活法。而lambda(函数名=lambda 参数:表达式)大家简单了解一下即可,建议写模块函数就用自定义函数。

差别我在图中已经注释了。

固定函数:之前咱们在讲数据类型的时候已经举了很多,包括方法也是固定函数之一。

这里大家看出啥没,告诉大家一个识别函数的小诀窍:

凡是有名字,后面跟个小括号的都是函数,如果前面没有名字就是元组类型

举个栗子:
set(),input(),eval(),max(),{}.add(),"".split(),list(),{}.get(),这些全是函数。(1,2,3)这个是元组数据



三、自定义函数

1、表示

def 函数名(参数:可0()/1(n)/可选(n,m)/可变多个(n,*b)):

    函数体

    return(可有可无) 返回值(可0/1/多个)


2、调用:函数名()


3、全局变量

global或函数内未创建组合类型都可以声明某个变量是全局变量,不局限在函数内


4、参数的传递可以用位置或名称,个人偏好位置



四、代码复用和模块化

代码复用的两种主要形式:函数和对象(对象其实就是咱们之前聊过的方法:a.b或a.b(),其实也是函数,不过人家更抽象)

模块化:就是把函数和对象进行封装,模块内紧耦合(交流很多无法独立存在),模块间松耦合(交流很少,可以独立存在)

举个栗子:

相信大家都知道乐高吧?没玩过的也听过吧?没听过赶紧去淘宝回来玩玩理解就更深刻了。

函数和对象,就像各种不同形状的小颗粒

封装,就像可嵌入的统一标准的凸粒

模块就像一扇窗户,一个门

所有组建起来,乐高可以搭建各式各样的建筑,也能还原星球大战的场景,也能模拟咱们生活的场景,还能进行艺术人像创造。

是不是和代码有异曲同工之妙?


五、函数递归

 “大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:人理解迭代,神理解递归。毋庸置疑地,递归确实是一个奇妙的思维方式。”
曾一度以为是我没有学好数学,以至于无法理解抽象的递归。看到上述那句话,我就释怀了,原来我还是一个正常人! 

关于递归,我还是不班门弄斧了,我自己决定只抓住下面3个重点即可,后面再慢慢去深入理解。

如果有宝宝想深入,推荐:https://blog.csdn.net/sinat_38052999/article/details/73303111


1、递归:函数调用自身。

2、基例:存在一个或多个不需要再次递归的基例,换句话说,明确终止递归的条件以及处理方案

3、链条:计算过程中存在递归链条,换句话说,提炼重复的逻辑。



来练练手:

让我们回到Python-30 之二:数据类型中里列举过的代码联系。

基金的现实世界很骨感,总是有涨有跌,假如,还是每周有2天下跌1%,但我还是想获得年末获得约38万的金额,另外5天到底要获得百分之几的收益率才能达到呢?


总结:


文章转载自Rhonin晴朗台风天,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论