点击上方蓝字关注"程序员Bob"呀~
天气真的是很不可思议,光只是天空的模样就让人感动不已。
——《天气之子》
函数在编程中的作用无需小编多说,无论是哪一种语言,代码敲起来必然少不了函数,函数在使用中的过程中其需要注意的语法错误也不是特多。
那么函数其重点便在它的用法及其作用了。
比如函数的递归,或者在使用函数时对于代码的复用。
切记编程不是文字游戏,不是多了解几个框架然后通过面试就行的,其实现在就有这种情况,框架背起来那比古代书生还猛,但你要他去写个代码,或者用用git,那就急得像热锅上的蚂蚁,所以,平时多写写代码是必须的。
Python代码复用
代码复用:
可以将代码看作为是一份“资源”,然后将其重复利用,即同一份代码在需要时可以被重复使用(一般使用函数和对象两种方式来实现代码复用)。
代码资源化:
程序代码是一种用来表达计算的“资源”。
代码抽象化:
使用函数等方法对代码赋予更高级别的定义。
函数也是对代码的一种抽象;
而函数也是将代码命名,且在代码层面建立了初步抽象 ;
那么何为对象呢,简单理解为是一种属性和方法,也可以在函数之上进行进一步抽象。
函数的思想便是模块化思想,也叫分而治之。即通过函数或对象封装程序划分为模块及模块间的表达,具体包括:主程序,子程序和子程序间的关系.
模块设计的两个基本概念:紧耦合和松耦合。
紧耦合:指两个部分之间交流很多,无法独立存在。
松耦合:指两个部分之间交流很少,可以独立存在,一般在模块内部实现紧耦合,在模块之间实现松耦合。
Python函数递归
函数递归:简单来说就是函数定义中调用函数自身的方式,也类似于数学中的数学归纳法。
在递归中有两个关键的特性:链条和基例。
链条:计算过程中存在递归链条;
基例:简单来讲就是基本的实例,即存在一个或多个不需要再次递归的基例。
调用过程:递归函数调用的实现,是需要以函数定义方式去描述,如果不是以函数的方式去调用,那很难实现,因为没有这个函数名字来去实现。在函数内部,采用分支语句对输入参数进行判断,在基例和链条的部分,分别编写对应的代码去实现。
以三个实例来理解递归:
1.字符串反转:将字符反转后输出,在之前的字符串讲到过字符串的切片功能,可以用s[::-1]实现,这里以递归方式来实现字符串的反转。
代码如下:
def r(s):if s=="":return selse:return r(s[1:]+s[0])
切记函数本身不会调用自己,需要在函数外部被调用才能使用。
2.斐波那契数列
代码如下:
def f(n):if n==1 or n==2:return 1else:return f(n-1)+f(n-2)
切记函数本身不会调用自己,需要在函数外部被调用才能使用。
3.汉诺塔问题(此函数被调用)
代码如下:
count = 0def han(n,s,d,m):global countif n==1:print("{}:{}->{}".format(1,s,d,))count+=1else:han(n-1,s,m,d)print("{}:{}->{}".format(n,s,d))count+=1han(n-1,m,d,s)han(3,"A","B","C")print(count)
(Python系列)未完待续...
往期推荐:
为你,千千万万遍.
关注程序员Bob公众号,与你一起终生学习
一键三连,就差你了