【循序渐进学Python】Python中的函数(四)——匿名函数与高阶函数

【循序渐进学Python】Python中的函数(四)——匿名函数与高阶函数

今天我们来学习Python函数中的灼遁·光轮疾风漆黑矢零式,听上去是不是花里胡哨,说白了就是函数中的比较难得两个模块,这两个模块分别是匿名函数和高阶函数,这两个函数在我们运用中使用较为广泛,所以我们今天来重点学习一波这两个知识点!

匿名函数

匿名函数的定义

  • 匿名函数是指在python中使用lambda来创建函数,称为匿名函数
  • 创建函数不再使用def来创建,而是使用lambda关键字创建一个形式主义的函数

格式

lambda 参数1,参数2...:(单行表达式或者函数调用)返回值

匿名函数的作用

  • 可以通过匿名函数来实现标准函数的功能
  • 可以作为一个函数的**参数进行传递,**将一个函数当成另一个函数的参数传递进另一个函数
  • (全局变量)一个函数只要被声明了.肯定在内存中存放好啦.
  • 程序运行函数即被创建,内存被分配,直到整个文件执行结束才会被处理
  • 使用匿名函数传递只有当这个函数被传递的时候开始创建,内存分配,这个函数执行完毕,匿名函数就会像局部变量一样只在这个函数内部存在,函数执行完毕,匿名函数也被释放

匿名函数的特点

  1. 匿名函数本质是一个表达式,不是代码块
  2. 匿名函数只能写一行代码
  3. 使用关键字lambda
  4. 如果有返回值数据类型不需要书写return关键字
  5. lambda的函数要比def函数简单的多
  • lambda中不能使用if语句、while语句、for循环,但是可以使用单行的表达式或函数调用
  • lambda的返回结果不需要使用return
  1. 仅仅能在lambda表达式中封装有限的逻辑进去

函数的本质

  • 函数本质是一个代码块集合,而函数名的作用是针对代码块集合的一个引用
  • 函数名可以理解为一个变量,这个变量里面引用的是函数主体所有代码

匿名函数使用场景

一般在实际开发中有两种使用场景

  1. 定义一个简单的单行函数
  2. 一个函数要作为另一个函数的参数进行传递(重点)

实例:

# 无参无返回值函数
# def fun1():
#     print("hello")
# fun1 = lambda : print("hello")
# fun1()

# 有参无返回值函数
# def fun2(str):
#     print("hello%s" % str)
# fun2 = lambda str : print("hello%s" % str)
# fun2("aa")

# 无参有返回值函数
# def fun3():
#     return "hello"
# fun3 = lambda : "hello"
# print( fun3())

# 有参有返回值函数
# def fun4(a):
#     return "hello%s" % a
# fun4 = lambda  a :"hello%s" % a
# print(fun4("aa"))

案例:

# 需求:使用匿名函数实现两个数之间的运算.
fun1 = lambda a, b: a + b
ret = fun1(4, 5)
print(ret)
fun2 = lambda a, b: a - b
rey = fun2(9, 2)
print(rey)
fun3 = lambda a, b: a * b
res = fun3(4, 5)
print(res)
fun4 = lambda a, b: a // b
rel = fun4(6, 3)
print(rel)

高阶函数

常用的高阶函数有map,reduce,filter.

map用法

  • map会根据提供的函数对指定序列做映射
  • 方法中第一个参数是定义的函数,对参数序列中的每一个元素进行调用该函数最终返回一个map对象
  • 这个map对象其本质是每个元素执行完定义的函数之后由重新组成的列表

案例:

# 需求:将指定列表中的每个元素进行求平方输出一个新列表
my_list = [1, 3, 5, 7, 9]
new_list = map(lambda x: x ** 2, my_list)
# map函数的作用就是,设置每个my_list中的元素传入fun方法执行完成之后,进行返回一个map对象
print(list(new_list))

# 需求:将一个列表中所有的单词的首字母大写
my_list = ["smith", "tom", "jerry", "john", "obama"]


def fun(x):
    return x.capitalize()


res = map(fun, my_list)
print(list(res))

reduce用法

  • reduce函数会对参数序列中元素进行累计

  • reduce高阶函数中第一个参数是函数,第二个参数是需要进行操作的数据,

    • 函数将一个数据集合中的所有数据进行函数中的操作

reduce高阶函数的运算流程:

  • 先对集合中的第1、2个元素运用函数计算得到的结果再与第三个元素运用函数进行计算以此类推,最后得到一个最终的结果

案例:

import functools

# 需求:求出列表中所有数据的和
my_list = [2, 5, 6, 7, 9]


def fun(x1, x2):
    return x1 + x2


res = functools.reduce(fun, my_list)
print(res)

filter用法

  • filter方法用于过滤序列过滤掉不符合条件的元素,返回一个filter对象,如果要转换为列表可以使用list()来转换
  • 该方法接收两个参数第一个为函数第二个为序列,序列的每个元素作为参数传递给函数进行判断然后返回True或False,最后将返回True的元素放到新的序列中

案例:

# 需求:将1-20内所有能被3整除的数寻找出来
my_list = [i for i in range(1, 21)]
res = filter(lambda x: x % 3 == 0, my_list)
print(list(res))

猜你喜欢

转载自blog.csdn.net/XVJINHUA954/article/details/107854383