函数的特点:1.可重用,2.可储存,3.几乎任何Python代码都可以放到函数中
函数的格式: def 函数名(形参表):
函数体语句序列
return 表达式 #可选项,即有的函数可以没有返回值
函数的调用:函数名(实参表)
注意:函数必须先定义,后使用;
函数名与变量名的命名规则相同,只能包含字母、数字和下划线_,且不能以数字打头
函数的参数
1)Python中的函数参数:
1.Python中任何东西都是对象,所以参数只支持引
2.Python通过名称绑定的机制,把实际参数的值和形式参数的名称绑定在一起,形式参数和实际参数指向内存中同一个存储空间。
3.向函数传递参数时,Python采用按引用传递的方式。这意味着当传递参数时,函数将使用新变量名来引用原始值。
2)函数的参数类型:
形式参数类型(定义函数时):普通参数、默认值参数、可变参数
2.Python通过名称绑定的机制,把实际参数的值和形式参数的名称绑定在一起,形式参数和实际参数指向内存中同一个存储空间。
3.向函数传递参数时,Python采用按引用传递的方式。这意味着当传递参数时,函数将使用新变量名来引用原始值。
2)函数的参数类型:
形式参数类型(定义函数时):普通参数、默认值参数、可变参数
1.普通参数:
def add(x,y): #x,y就是普通参数
return x + y
2.默认值参数:函数的参数支持默认值。当某个参数没有传递实际的值时,函数将使用默认参数计算。注意:带默认值的参数不能位于没有默认值的参数前面。

3.位置可变参数(*args):在形式参数名称前加一个星号*,则代表使用该形式参数可以接收任意多个参数,而且接收的参数将会以元组的方式组织。
def func(*args):
print(args)
func(1,2,3,4,’abc’)
4.关键字可变参数(**kwd):在形式参数名称前加两个星号**,则代表使用该形式参数可以接收任意多个传入的键-值对参数(关键字实参),而且接收的参数将会以字典的方式组织。
def unc(**kwd):
print(kwd)
func(name=‘tom’,age=20)
注意: 当位置可变参数(*args)和关键字可变参数(**kwd)一起使用时候,必须先声明位置可变参数(*args),最后声明关键字可变参数(**kwd)
实际参数(调用函数时):位置实参、关键字实参、解构实参 1.位置实参
def add(x,y):
return x + y
2.关键字实参:函数的参数支持默认值。当某个参数没有传递实际的值时,函数将使用默认参数计算注意:带默认值的参数不能位于没有默认值的参数前面。
3.解构实参 非字典类型使用*解构成位置参数,字典类型使用**解构成关键字参数 4.keyword-only参数由于args是位置可变参数,可以截获传递所有的位置实参,所以参数x不能接收到其它位置实参,这 时,只能通过关键字实参的方式给x传值。
常用的几个函数:
1.Generator函数:
定义:Generator函数的作用是一次产生一个数据项,并把数据项输出,迭代性能更佳说明:Generator函数可以被for循环中遍历,且可以通过__next__()方法(Python 2是next方法)获得yield生成的数据项。Generator函数的定义与普通函数的区别只是在函数体内使用yield生成数据项。
格式:
def 函数名(参数列表):
…
yield 表达式
实例:
2.lambda函数:
定义:Lambda函数用于创建一个匿名函数,函数名未和标识符进行绑定。
说明:使用Lambda函数可以返回一些简单的运算结果。
格式:lambda 变量1,变量2…:表达式
实例:
递归函数:
概念:递归函数可以在函数主体内直接或间接地调用自己,即函数的嵌套是函数本身。
递归是一种程序设计方法,使用递归可以减少重复的代码,使程序变得简洁。
递归的过程分为两个阶段:递推和回归。
原理:
第一阶段,递归函数在内部调用自己。每一次函数调用又重新开始执行此函数的代码,直到某一级递归程序结束。
第二阶段,递归函数从后往前返回。递归函数从最后一级开始返回,一直返回到第一次调用的函数体内。即递归函数逐级调用完毕后,再按相反的顺序逐级返回。
实现:
一个问题能否用递归实现,看其是否具有下面的特点:
需有完成任务的递推公式。
结束递归的条件。
编写递归函数时,程序中必须有相应的语句:
一个递归调用语句。
测试结束语句。先测试,后递归调用。lambda 变量1,变量2…:表达式
实例: