递归函数、匿名函数和高阶函数

  1、什么是递归函数:如果一个函数不调用其他函数,而是调用本身的话就是递归函数。

def a():
    print("-----OK!------")
    a()


print(a())

print("-----OK!------")
RecursionError: maximum recursion depth exceeded while calling a Python object

  这是一个简单的例子,如果递归函数无线循环就会触发“RecursionError”错误,因此我们需要对递归函数添加条件,限制循环次数。

def test(i):
    #  限定条件
    if i == 10:
        print("10")
    else:
        print(i)
        i += 1
        test(i)


test(1)

  这样就不会报错。

  2、什么是匿名函数:用“lambda”创建的小型匿名函数,这种函数得名于省略了def声明函数的标准步骤。

'''
匿名函数的格式
lambda 参数列表:运算表达式
'''

r = lambda a: a + 1
#  print(r)
result = r(5)
print(result)

   3、什么是高阶函数:既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,同样我们还可以把一个函数当做另一个函数的返回值。这种函数的使用方式我们称为高阶函数。

#  下面这个可以说是高阶函数
def func1(a, f):
    print("++++++++>", a)
    r = f(a)
    print("=========>", r)


#  匿名函数多作为其他函数的参数使用
func1(8, lambda x: x ** 2)

  * 系统函数的高阶函数实例

from functools import reduce

m = max(5, 9)
print(m)

m = max([2, 5, 62, 8, 10, 33])
print(m)

list1 = [('tom', 19), ('tony', 20), ('lily', 18), ('daniel', 21), ('rose', 22)]
#  这是默认排序的方法,结果是:('tony', 20)
m = max(list1)
print(m)
#  使用了高阶函数的表示法,结果是('rose', 22)
m = max(list1, key=lambda x: x[1])
print(m)

#  然后是最小值,结果是:('lily', 18)
m1 = min(list1, key=lambda x: x[1])
print(m1)

#  排序,结果是[('lily', 18), ('tom', 19), ('tony', 20), ('daniel', 21), ('rose', 22)]
s = sorted(list1, key=lambda x: x[1])
print(s)

#  排倒序,结果是[('rose', 22), ('daniel', 21), ('tony', 20), ('tom', 19), ('lily', 18)]
s = sorted(list1, key=lambda x: x[1], reverse=True)
print(s)

#  筛选
rr = filter(lambda x: x[1] > 20, list1)
#  打印出迭代器地址<filter object at 0x0000025F721B99A0>
print(rr)
#  转化为列表后再打印:[('daniel', 21), ('rose', 22)]
print(list(rr))

#  提取数据并加工
#  把所有人的年龄加1
ma = map(lambda x: x[1] + 1, list1)
#  打印出迭代器地址<map object at 0x0000022454D865B0>
print(ma)
#  强转为列表,打印结果为:[20, 21, 19, 22, 23]
print(list(ma))
#  把所有人名字首字母大写['Tom', 'Tony', 'Lily', 'Daniel', 'Rose']
ma = map(lambda x: x[0].title(), list1)
print(list(ma))

#  累加求和:55
rr = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(rr)
#  累加求乘:3628800
rr = reduce(lambda x, y: x * y, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(rr)

 

posted @ 2021-09-20 08:45  逍遥abin  阅读(55)  评论(0编辑  收藏  举报