局部变量
定义在函数中的变量叫做局部变量
作用范围:只能在函数中使用,函数外无法使用,如下两图:
图1:在函数内打印变量name,可以成功输出xiaoming
图2:在函数外打印变量name,提示变量name未定义
图1
图2
注意:形参也是局部变量
全局变量
定义在函数外的变量叫做全局变量
作用范围:在任何一个函数中均可以使用,但不可以修改值,如需修改需要在函数中声明变量(global 变量名),如下三图:
图1:在函数test1和test2分别打印变量name,均可成功输出xiaoming
图2:在函数test1中将变量name值更改为xiaohong,在函数test2中打印变量name,结果仍输出为xiaoming,全局变量name值未被修改
图3:在函数test1中加入声明变量global name,扔将变量name值更改为xiaohong,在函数test2中打印变量name,结果输出为xiaohong,全局变量name值被修改
图1
图2
图3
函数返回值补充
函数的返回值除了可以是数值和字符串外还可以是列表、元组、字典
如下三图:
图1:返回值是列表
图2:返回值是元组
图3:返回值是字典
图1
图2
图3
函数参数补充
缺省参数
带有默认值的参数叫做缺省参数
作用范围:缺省参数位置如果有值传入,使用所传入的值,如果没有值传入,则使用默认值,如下两图:
注意:缺省参数要写在参数列表的最后面
图1:缺省参数c位置没有值传入,则输出默认值100
图2:缺省参数c位置有值传入,则输出传入的值3
图1
图2
默认情况下传入的实参与形参顺序是一一对应的(第一个实参传给第一个形参),如果存在多个缺省参数,需要给指定的缺省参数传值,则在实参处指定缺省参数名字和传入的值,如图:
不定长参数
默认情况下传入实参的个数的与形参是一直的,如果想要不限制传入参数的个数,则使用不定长参数
表现形式:*args **kwargs
说明:变量非必须使用args、kwargs,但是习惯是以这两个命名
*args
加上*的变量表示可以以元组的形式存放多个传入参数,如图:
**kwargs
加上**的变量表示可以以字典的方式存放多个命名参数(key=value),如图:
递归函数
函数在执行的时候调用函数自身,就叫做递归函数
如图:
应用场景:
计算1到100的阶乘(1*2*3*4.......*100)
思路:1到100的阶乘可以看做100乘以1到99的阶乘的返回结果,1到99的阶乘可以看做99乘以1到98的阶乘返回结果,依次类推
注意:0乘以任何数都等于0,所以需要加上判断
匿名函数
如果一个函数的功能简单,可以省略def创建的标准步骤,使用匿名函数代替
表现形式:
定义:变量 = lambda 变量,变量(可以写无限多个变量):表达式
调用:变量(和表达式前变量个数相等的值,值与值之间用逗号隔开)
如图:
应用场景:将匿名函数当做函数的参数传递
说明:可以根据传入的匿名函数来计算任意两个数的加减乘除等