免费发布信息
微信公众号

【python教程】Python lambda 表达式

   来源:黔优网责任编辑:优优  时间:2023-08-26 10:17:01 浏览量:39
导读:Python lambda 表达式在很多资料中,经常会看到这样一句话:“Python 中的函数是第一类对象”。关于这一点,Python 的创始人 Guido 曾提过 “First-class Everything”,他对 Python 的一个发展目标就是所有的对象都

Python lambda 表达式

在很多资料中,经常会看到这样一句话:“Python 中的函数是第一类对象”。关于这一点,Python 的创始人 Guido 曾提过 “First-class Everything”,他对 Python 的一个发展目标就是所有的对象都是第一类对象。

1. 将函数作为第一类对象

1.1 什么是第一类对象

在前言中所说的第一类对象,其实是指函数作为一个对象,与其它对象具有相同的地位。具体来说,数值可以被赋值给变量、作为参数传递给函数、作为返回值,因为函数和数值具有相同的地位,所以函数也可以被赋值给变量、作为参数传递给函数、作为返回值。

Python 中的常见类型对象包括:

  • 数值,例如:123、3.14

  • 字符串,例如:“Hello”、“World”

  • 布尔值,例如:True、False

  • 列表,例如:[1, 2, 3]

  • 字典,例如:{‘name’: ‘tom’, ‘age’: 12}

可以在如下场合中处理这些对象,包括:

1.1.1 将对象赋值给变量

可以将数值、字符串、列表、字典类型的对象赋值给变量,例如:

number = string = hellolist = [, , ]dict = {'name': 'tom', 'age': }

1.1.2 将对象作为参数传递

可以将数值、字符串、列表、字典类型的对象作为参数传递给函数,例如:

print()print(hello)print([, , ])print({'name': 'tom', 'age': })

1.1.3  将对象用作返回值

可以将数值、字符串、列表、字典类型的对象作为函数的返回值,例如:

def return_number():return def return_string():return hellodef return_list():return [, , ]    def return_dict():    return {'name': 'tom', 'age': }

1.2 将函数作为第一类对象

将函数作为第一类对象,函数具有和数值、字符串、列表、字典等类型的对象具有相同的地位,因此:

1.2.1 可以将函数赋值给变量

def max(a, b):if a > b:return aelse:return b var = maxprint('max = %d' % var(, ))
  • 在第 1 行,定义函数 max

  • 在第 7 行,将函数 max 作为值赋予变量 var

  • 在第 8 行,变量 var 的类型是函数,因此可以进行函数调用

程序的输出结果如下:

max = 2

1.2.2 可以将函数作为参数传递

def func():print('Inside func')def pass_func(data):   print('Inside pass_func')data()pass_func(func)
  • 在第 1 行,定义函数 func

  • 在第 4 行,定义函数 pass_func,函数 pass_func 的参数 data 的类型是函数

  • 在第 6 行,调用函数 data (),data 的类型是函数,因此可以进行函数调用

  • 在第 8 行,将函数 func 作为参数传递给函数 pass_func

程序的输出结果如下:

Inside pass_funcInside func

1.2.3 可以将函数作为返回值

def func():print('Inside func')def return_func():   print('Inside return_func')return func var = return_func() var()
  • 在第 1 行,定义函数 func

  • 在第 4 行,定义函数 return_func,函数 return_func 返回一个函数类型的对象

  • 在第 6 行,将函数 func 作为值返回

  • 在第 8 行,调用 return_func (),将函数的返回值保存到变量 var

  • 在第 9 行,变量 var 的类型是函数,因此可以进行函数调用

程序的输出结果如下:

Inside return_funcInside func

2. 将函数作为第一类对象的意义

将函数作为第一类对象,是一种重要的抽象机制,极大的提升了程序的灵活性。通过一个例子进行说明。假设需要完成这样的任务:

  • 存在一个列表 [1, -1, 2, -2, 3, -3]

  • 打印输出列表中的正数

  • 打印输出列表中的负数

我们使用两种方法实现:

  • 包含重复性代码的解决方法

  • 将函数作为参数传递

2.1 包含重复性代码的解决方法

list = [, -, , -, , -]def print_positive(list):for item in list:if item > :print(item)def print_negative(list):for item in list:if item < :print(item)print_positive(list)print_negative(list)
  • 在第 3 行,定义了函数 print_positive,该函数打印 list 中的正数

  • 在第 8 行,定义了函数 print_negative,该函数打印 list 中的负数

  • 对比函数 print_positive 和函数 print_negative,两者的相似度很高

    • 代码的结构完全相同

    • 遍历 list 时,两者的选择条件不一样,print_positive 使用 item > 0 的条件选择,print_negative 使用 item < 0 的条件选择

程序的输出结果如下:

123-1-2-3

2.2 将函数作为参数传递

list = [, -, , -, , -]def select_positive(x):return x > def select_negative(x):return x < def select(list, select_function):for item in list:if select_function(item):print(item)select(list, select_positive)select(list, select_negative)
  • 在第 3 行,定义了函数 select_postive,如果参数 > 0,则返回真

  • 在第 6 行,定义了函数 select_negative,如果参数 < 0,则返回真

  • 在第 9 行,定义了函数 select,包含两个参数,第 1 个参数是列表,第 2 个参数的类型是函数

    • 在第 10 行,遍历列表 list

    • 在第 11 行,参数 selct_function 是一个函数,用于选择是否选中当前正在遍历的数值

  • 在第 14 行,将函数 select_positive 作为参数传递给函数 select,函数打印列表中的正数

  • 在第 15 行,将函数 select_negative 作为参数传递给函数 select,函数打印列表中的负数

程序的输出结果如下:

123-1-2-3

3. 匿名函数 lambda

3.1 lambda 表达式的定义

在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。Python 提供了 lambda 表达式对匿名函数提供了有限支持,lambda 表达式的语法如下:

lambda args: expression

使用 lambda 表达式定义一个函数,函数判断输入参数是否大于 0,如下所示:

lambda x: x >

该函数等价于函数 select_positive,如下所示:

def select_positive(x):return x >

函数 select_positive 与 lambda 表达式的功能相同,函数 select_positive 具有函数名称,lambda 表达式没有函数名,因此 lambda 表达式又被称为匿名函数。

3.2 使用 lambda 表达式重写程序

在前面的小节中,将函数作为参数,编写程序实现打印正数和负数。下面使用 lambda 表达式重写这个程序:

list = [, -, , -, , -]def select(list, select_function):for item in list:if select_function(item):print(item)select(list, lambda item: item > )select(list, lambda item: item < )
  • 在第 3 行,定义了函数 select,它与前面的小节定义的函数完全相同

    • 在第 4 行,遍历列表 list

    • 在第 5 行,参数 selct_function 是一个函数,用于选择是否选中当前正在遍历的数值

  • 在第 8 行,定义了 lambda 表达式

    • lambda 表达式判断输入参数是否为正数

    • 将 lambad 表达式作为参数传递给函数 select,函数打印列表中的正数

  • 在第 9 行,定义了 lambda 表达式

    • lambda 表达式判断输入参数是否为负数

    • 将 lambad 表达式作为参数传递给函数 select,函数打印列表中的负数

程序输出结果如下:

123-1-2-3

3.3 map 函数

使用 Python 内置的 map 函数时,通常会用到 lambda 表达式。map 函数的原型如下:

map(function, list)

map 函数接收两个参数 function 和 list,function 是一个函数,list 是一个可以被遍历的序列,map 将传入的函数依次作用到序列的每个元素,并把结果作为新的序列返回。map 函数的工作原理图如下:

图片描述


map 函数原理图
  • 图的左边是一个序列 list,包含 3 个元素 1、2、3

  • 调用函数 map 时,需要提供一个函数 y = f (x),函数 f 将输入 x 映射为输出 y

  • 将函数 f 对图的左边的序列中的每个元素依次作用,得到图的右边的序列

  • 图的右边是一个序列 list,包含 3 个元素 f (1)、f (2)、f (3)

list = [, , ]list2 = map(lambda x: x * , list)for item in list2:print(item)list10 = map(lambda x: x + , list)for item in list10:print(item)
  • 在第 1 行,定义原始序列 list

  • 在第 3 行,定义 lambda 函数,作用于 list 中的每个元素,将每个元素乘以 2,生成一个新序列 list2

  • 在第 4 行,打印输出新序列 list2

  • 在第 7 行,定义 lambda 函数,作用于 list 中的每个元素,将每个元素加上 10,生成一个新序列 list10

  • 在第 8 行,打印输出新序列 list10

程序输出结果如下:

246111213

4. 小结

Python 对 lambda 函数 的支持有限。当我们在编写程序的时候如果代码只是用一次,并不会复用的时候 lambda 函数是一个非常好的选择。

 
 
 
没用 0举报 收藏 0评论 0
免责声明:
黔优网以上展示内容来源于用户自主上传、合作媒体、企业机构或网络收集整理,版权争议与本站无关,文章涉及见解与观点不代表黔优网官方立场,请读者仅做参考。本文标题:【python教程】Python lambda 表达式,本文链接:https://qianu.com/news/250743.html,欢迎转载,转载时请说明出处。若您认为本文侵犯了您的版权信息,或您发现该内容有任何违法信息,请您立即点此【投诉举报】并提供有效线索,也可以通过邮件(邮箱号:kefu@qianu.com)联系我们及时修正或删除。
 
 

 

 
推荐图文
推荐商业资讯