- 函数的基本定义
使用关键字def定义函数,实参是必传参数,形参是位置参数,默认的参数必须放在位置参数后面。
2.函数的封装调用
return总结:
1.遇到return. 此函数结束, 函数后⾯的东⻄将不会再执⾏
2. return什么都不写 或者 干脆不写return 默认返回值为None
3.return后面写了一个值. 则调用者可以接收⼀个结果
4.return后面写了多个结果, 则调用者可以接收一个tuple, 调用者可以直接解构成多个变量
3.判断小数点函数
1.小数点个数可以使用.count()方法
2.按照小数点进行分割 例如: 1.98 [1,98]
3.正小数:小数点左边是整数,右边也是整数 可以使用.isdigits()方法
4.负小数:小数点左边是是负号开头,但是只有一个负号,右边也是整数
4.函数的位置传参和关键字传参
位置传参
调用函数时根据函数定义的参数位置来传递参数,必传参数也叫做位置参数,因为必填,也必须一一对应位置。
关键字传参
传进去的是0个、或多个键-值”key=value的形式,关键字传参后,后面不能再写位置参数了,可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求
5.不定长参数*args和 **kwargs
调用函数的时候可以传0个或者多个
- *args:接收多传入的位置参数,以元祖的形式保存(只能位置传参)
*args,args接收的是一个元祖,调用的时候可以直接传入
func(*(11,22,33,44,55,66,77));
- **kwargs:接收多传入的关键字参数,以字典的形式保存(只能关键字传参)
**kwargs,kw接收的是一个字典,关键字参数既可以直接传入
func(11,22,e=33,h=44,f=55,d=66,c=77)
- 也可以先组装dict,再通过**kw传入
func(**{'e':33,'h':44,'d':66,'c':77})
6.函数的递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。(自己调用自己)
递归的特性:
1、递归函数必须有一个明确的结束条件。
2、每进入更深一层的递归时,问题规模相对于上一次递归都应减少
3、相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。
4、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)