函数的定义:
def 函数名:
def test():
函数的调用:
test()
接收函数返回值:
result = test()
函数的参数
在函数中使用return 来返回一个值
返回值可以使数字、字符串、列表、元组、 字典等。
如果没有返回值则返回none
可以有多个返回值。
返回值个数 = 0时 :返回none
返回值个数 = 1 时 :返回object
返回值个数 > 1时 :返回元组类型

参数的分类
位置参数:形参和实参必须顺序和数量对应
关键字参数:以形参=实参的方式传入参数,可以不按顺序,形参和实参的数量必须一致
默认参数: 在形参处指定默认值,如果没有传入此参数,则参数为默认值
参数组:
*args :当拥有多个参数并且参数数量不固定时,使用*args,以列表的形式传入多个位置参数
**kwargs : 当拥有多个关键字参数并却参数数量不固定时,使用**kwargs,以字典的形式传入多个关键字参数

全局变量在文件头部定义,全局变量可以在程序任意地方都可以使用
局部变量只能在定义局部变量的函数内使用
如果在函数内定义的局部变量和全局变量名称一致,则在函数内默认使用局部变量,如果要在函数内使用全局变量时,需要先声明该变量(global 全局变量名)

递归函数
递归函数就是在函数内自己调用自己
递归特性
1.必须有一个明确的结束条件
2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3.递归效率不高,递归层次过多会导致栈溢出(最大递归次数为999次)
def test(n):

print(n)
         if n > 0 :        #这是一个结束条件
             test(int(n/2))     #递归调用
     test(10)

高阶函数
将函数作为参数传入另一个函数叫做高阶函数
函数的结果可以赋值给变量,而变量又可以作为函数的参数,所以我们可以直接用函数来作为函数的参数

def add(a,b,f):
           return f(a)+f(b)  #这里对变量a 和变量b 使用了函数f
       add(1,-1,abs)   #这里求绝对值的函数abs作为实参传入形参f