函数在编程中的作用无需小编多说,无论是哪一种语言,代码敲起来必然少不了函数,函数在使用中的过程中其需要注意的语法错误也不是特多。

那么函数其重点便在它的用法及其作用了。

比如函数的递归,或者在使用函数时对于代码的复用。

切记编程不是文字游戏,不是多了解几个框架然后通过面试就行的,其实现在就有这种情况,框架背起来那比古代书生还猛,但你要他去写个代码,或者用用git,那就急得像热锅上的蚂蚁,所以,平时多写写代码是必须的。

  

Python代码复用

代码复用:

可以将代码看作为是一份“资源”,然后将其重复利用,即同一份代码在需要时可以被重复使用(一般使用函数和对象两种方式来实现代码复用)。 代码资源化:

程序代码是一种用来表达计算的“资源”。  代码抽象化:

使用函数等方法对代码赋予更高级别的定义。  函数也是对代码的一种抽象;   而函数也是将代码命名,且在代码层面建立了初步抽象 ; 那么何为对象呢,简单理解为是一种属性和方法,也可以在函数之上进行进一步抽象。

函数的思想便是模块化思想,也叫分而治之。即通过函数或对象封装程序划分为模块及模块间的表达,具体包括:主程序,子程序和子程序间的关系.

模块设计的两个基本概念:紧耦合和松耦合。

紧耦合:指两个部分之间交流很多,无法独立存在。

松耦合:指两个部分之间交流很少,可以独立存在,一般在模块内部实现紧耦合,在模块之间实现松耦合。


Python函数递归


函数递归:简单来说就是函数定义中调用函数自身的方式,也类似于数学中的数学归纳法。

在递归中有两个关键的特性:链条和基例。

链条:计算过程中存在递归链条;

基例:简单来讲就是基本的实例,即存在一个或多个不需要再次递归的基例。

调用过程:递归函数调用的实现,是需要以函数定义方式去描述,如果不是以函数的方式去调用,那很难实现,因为没有这个函数名字来去实现。在函数内部,采用分支语句对输入参数进行判断,在基例和链条的部分,分别编写对应的代码去实现。

以三个实例来理解递归:

1.字符串反转:将字符反转后输出,在之前的字符串讲到过字符串的切片功能,可以用s[::-1]实现,这里以递归方式来实现字符串的反转。

代码如下:

def r(s):    if s=="":        return s    else:        return r(s[1:]+s[0])

切记函数本身不会调用自己,需要在函数外部被调用才能使用。

2.斐波那契数列

代码如下:

def f(n):    if n==1 or n==2:        return 1    else:        return f(n-1)+f(n-2)

切记函数本身不会调用自己,需要在函数外部被调用才能使用。

3.汉诺塔问题(此函数被调用)

代码如下:

count = 0def han(n,s,d,m):    global count    if n==1:        print("{}:{}->{}".format(1,s,d,))        count+=1    else:            han(n-1,s,m,d)            print("{}:{}->{}".format(n,s,d))            count+=1            han(n-1,m,d,s)han(3,"A","B","C")print(count)