python函数递归拆分,今日份 python(部分函数+递归)

函数部分了解了内嵌函数、闭包和lambda表达式。

上次说到全局变量和局部变量,在函数内部尽量避免去改变全局变量的值,这样会降低代码的可读性,一般当你在函数里改变全局变量的值时,系统会默认创建一个名字与全局变量相同的局部变量去赋值,而原本的局部变量值不会改变。但是也不是说在内部函数里改变不了全局变量的值,如果你真的需要修改,则可以通过 global关键字 去修改,去声明你要改变这个全局变量而不是去默认创建局部变量。

global 全局变量

全局变量 = 赋值

闭包,简单理解为 函数1里面还有一个函数2 且函数2里用到了函数1里的变量,这时 函数2就叫做函数1的闭包。

800ed2e1069615ae26f25cf3aa063cff.png

函数fun2就是函数fun1的闭包,x相当于fun2的外部变量,这里fun2里面是不能改变x的值的(类似全局变量)

379fbeebb1a7c2aae26fff4435b374ae.png

如果想在闭包里改变外部函数变量的值,就需要用到 nonlocal关键字。

d3f3258e8928a270118ffcfc616e8484.png

接下来 lambda 表达式,是一种匿名函数创建方式,利用lambda 表达式可以省下定义函数的过程,也不用去想函数名等等。

lambda 变量 : 函数式(返回值)

550fec7d88817d1f6307337ac21def99.png

这样可以就不用去定义那些简单的函数,直接用lambda会使代码更加简洁。

其次 学习了两个重要的BIF。

0.filter(函数 or None,迭代对象) (可以有两个参数) 这个BIF的功能简单讲就是帮你找到 1 的对象,有过滤功能。

081e593ed8f518f42678e9965d90ea04.png

可能看到这里,觉得这个BIF的功能没啥用,不过当这个BIF与上面的 lambda表达式结合,就会使代码变的简单起来。

5f76f3de601574b1ce195ea2f24f6c16.png

利用一句话就能找到1到9的奇数并合成为列表使用,这样是不是就能让整个代码简洁了很大。

1.map() 2个参数,这个BIF 是映射的意思,直接举例子

86165d32053235ba967209c4bc9b6940.png

这里就是把迭代对象里的元素,依次带入函数中求出结果。

这两个BIF都是比较常用的,配合lambda表达式 会有意想不到的东西。

其次,今天着重看了 递归,个人觉得递归可以说好理解,但不好弄懂。关于递归,看了两个例子。第一个就是 著名的斐波那契数列,比较简单,这里既可以使用迭代也可以利用递归。

c0c913054c070983798ca8a7fe6c2145.png

db5665b1dee3f78fa743851501bb87fc.png

上面是两种方法的代码,可以看出递归代码篇幅明显更短,更简洁。但是这里不建议使用递归去实现,因为递归是用内存的代价去换来简便的代码,当你去输入一个很大的数的时候,就会明显感受到递归的速度、效率明显低于迭代的。

而什么时候去使用递归呢?这里举第二个例子 著名的汉诺塔游戏,如果这里去使用迭代的话,一般人还真写不出来,但利用递归将会使这个难题变的简单起来。

b344e6071480ddcb0b0fa44e982ee036.png

上面的代码输入盘子的层数就能得到一个怎么移动盘子的攻略。代码非常的简短,但却解决了一个很复杂的问题,这里就不得谈谈 递归思想——分治思想,简单说就是把一个复杂很难的问题,分成几个小问题,若小问题还是很复杂,则将小问题继续分解下去,直到一个个简单举手间就能解决的小问题,只要把小问题解决了,这样就能往回走就相当于把这个大难题解决。递归就差不多就是这个意思,但递归虽好,也不要去轻易使用,不然代码效率会大大折扣,这也就是为什么说 ‘普通程序员,用迭代;天才程序员,用递归。’

——————————垃圾分界线——————————————

消失了一周,我又回来了。上一周自从考完物理,就又要搞物理实验报告又要准备下次的物理预习实验,还有Java的课程设计等等,反正就是鸡毛蒜皮生活琐事也是一大堆,搞的自己很难静下心去学习一个新东西,每天跑去看什么课外书或者纪录片(这里推荐《平凡的世界》、《国家宝藏》挺好看的 ) 以后的时间会比较充裕,很多课都准备结课了,就 离散 比较需要花时间去复兴,希望自己多多加油!不要懈怠呀!别天天发呆了。。。。。

标签:函数,递归,python,代码,BIF,全局变量,lambda

来源: https://blog.csdn.net/weixin_45666838/article/details/111078311

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值