一、函数的概念
python中函数是最常用的调用方法。所谓函数,是一个行为,一个动作,一个功能,一个过程。可以将函数理解为一个“代词”,用来指你定义的某个方法。
二、python定义函数方法
def 函数名称 (参数):
函数内容
返回值(可以没有)
三、函数命名规则
函数是一个变量,所以它的命名规则与变量相同:
1、变量名称只能由(大小写字母、数字、_)有效符号组成
2、不要使用数字开头!!!
3、不要使用关键字或者保留字!!!
4、变量命名尽量有意义
5、推荐使用下划线命名法
四、函数的分类
函数大概可分为七类,通过是否存在返回值可分为有返回值的函数和无返回值的函数,通过是否存在参数可分为有参函数和无参函数,通过函数定义者可分为系统函数和 第三方定义函数以及 自定义函数
1、有返回值函数:
①:使用return关键字返回结果
②:函数遇到return,立即返回
2、无返回值函数
3、有参函数
①:参数个数,根据情况任意
②:参数类型,是任意的类型
4、无参函数
5、系统函数:
由官方定义的函数:
如 input print type
6、第三方定义的函数:
需要安装模块,才能使用
pip install 模块名称(Linux需要先安装pip)
7、自定义函数:
也就是我们自己定义的函数(使用def)
五、函数调用
函数本质其实就是对象
调用就是先压栈 然后使用,走完整个函数流程之后,将函数出栈。
压栈(进栈):将函数放入栈中执行。
弹栈(出栈):函数执行完成后出栈。
六、引用传递和值传递
引用传递:本质是用一个地址,对象,引用。
值传递:本质就是用了这个值。
七、函数参数
默认值参数:
如果一个函数的参数,在大多数情况下,值是固定的一个值,此时可以使用默认值参数
这个时候,如果不传该参数,值就取默认的,如果传递了,则按照传递的算。
注意:默认值参数,一定要写在普通参数之后
可变参数:
在python,如果一个函数中参数可能有很多(这些参数,也可以没有),建议将这种参数设置为可变参数
参数名称(习惯性args)
注意:可变参数默认是以元组封装所有参数
命名(关键字)参数:
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
八、递归
首先要知道什么是递归,递归字面的意思即逐层递进、归纳总结。
递归实质上是一个自己不断调用自己的过程,通过对自身的不断调用,来解决相应问题。
举个例子,如果要从1加到n,常规方法就是写一个循环让他自身累加最后输出即可,但递归操作更加直接,比如我们要计算55的值,通过不断调用自身,让n从55逐一开始向下累加,每次return返回的值就是上次计算的值-1,然后下一次调用自身的时候自身的值已经变成了-1后的值,一直调用一直-1直到减到1位置,即可实现累加。
#for循环累加
def x(n):
a=0
for i in range (n+1):
a+=i
return a
print (x(55))
#递归累加
def x(n):
if n == 1:
return 1
return n+x(n-1)
print (x(55))
两次输出结果一致
但是从这里我们发现递归的一个问题,就是他不会自动停止,是一个死循环,如果不主动施加条件让他停止他会一直执行下去。
递归操作与调用函数不同的是,调用函数是压栈过后可以自动释放内存空间的,而递归操作压栈之后不会主动释放内存空间,通过不断的压栈,不断的申请内存达到对自身不断的调用的目的。所以一定要注意递归终止条件,否则会造成栈溢出。Python中规定不能超过1000次,不过如果有必要也通过指令可修改次数。