八、函数中变量的作用域:
1、全局变量与局部变量:
(1) 同一级的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响
(2) 定义在函数内部的变量拥有一个局部作用域,定义在函数外的相当于这个函数的全局作用域。局部作用域
可以访问全局作用域,反之不行。
2、局部作用域修改全局变量:
(1)可变数据类型:对于可变类型的全局变量来说,要在函数中修改可以不使用global声明。
(2)不可变数据类型:对于不可变类型的全局变量来说,要在函数中修改需要global声明。
a = 1
def func():
global a
a = 2
print(a) 2
func()
print(a) 2
九、匿名函数(lambda表达式):
1、lambda 来创建匿名函数规则:
lambda匿名函数的表达式规则是:lambda 行参列表: 表达式
●lambda只是一个表达式,函数体比def简单很多。
●lambda与Javascript不同的是,python中匿名函数与非匿名函数需要使用不同的语法
●lambda的主体是一个表达式,而不是一个代码块,所以不能写太多的逻辑进去。
●lambda函数拥有自己的命名空间,且不能访问自有 型参列表 之外或全局命名空间里的参数。
●lambda定义的函数的返回值就是表达式的返回值,不需要return语句块
●lambda表达式的主要应用场景就是赋值给变量、作为参数传入其它函数
2、与列表解析混合实例:
注意:列表解析属于表达式,其得到的结果是列表,列表解析并不是函数。
list1 = [1,2,3,4,5,6,7]
func1 = lambda list:[i for i in list if i > 3] # 赋值函数名
func1(list1) # 没有结果 ,需要打印返回值
print(func1(list1)) # [4, 5, 6, 7]
列表解析:
print([i for i in list if i > 3]) # [4, 5, 6, 7]
十、递归函数:
1、特性:
(1)递归函数:一句话,自己调用自己。
(2)递归函数一定有极限值。
(3)递归函数倒着来计算极限值(第一项)。
2、实例: