函数进阶

一、递归函数

递归函数:就是在函数内部调用自身函数

注意点:一定要设置递归的临界点(终止递归的条件)

获取最大递归深度: res = sys.getrecursionlimit()

设置最大递归深度:sys.setrecursionlimit(400000)

def mut(n):
    if n == 1:
        return 1
    else:
        return mut(n - 1) * n

二、纯函数

概念:简单来说,一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用,我们就把这个函数叫做纯函数

3个原则:

1.变量都只在函数作用内获取,作为函数的参数传入

2.不会产生副作用,不会改变被传入的数据或者其他数据(全局变量)

3.相同的输入保证相同的输出

函数的副作用:调用函数会对当前的环境造成影响(修改当前环境中的数据)

三、匿名函数

语法:lambda 参数:返回值表达式

res = (lambda x,y:x+y)(11,22)

匿名函数结合 内置函数:filter一起使用

res = filter(lambda x: len(x) > 4, Names)

匿名函数结合推导式使用

li2 = [(lambda x: x/5)(i) for i in li]

四、python内置函数

all函数:判读可迭代对象中所有的数据都为真(布尔值为True)

any函数:迭代对象内只要有一个元素为真,返回True

locals函数:获取当前局部的作用域所有的变量,以字典形式进行输入

globals函数:获取当前作用域类的所有全局变量,以字典形式属性

map函数:
1.将函数应用于iterable中每一项并输出其结果的迭代器
2.自动将可迭代对象遍历,把遍历出来的数据,当成参数传入map第一个接口的函数中,将函数执行的结果,放到一个迭代器中进行返回

map(lambda x: x * 2, [1, 2, 3, 4, 5])

filter函数:过滤函数

zip函数:聚合打包

五、偏函数

偏函数:可以用来固定函数中的函数

from functools import partial

res1 = filter(lambda x: x > 5, li1)
res2 = filter(lambda x: x > 5, li2)
res3 = filter(lambda x: x > 5, li3)

filter2 = partial(filter,lambda x:x>5)

print(list(filter2(li1)))
print(list(filter2(li2)))
print(list(filter2(li3)))