首页 > 编程语言 >Python Lambda 表达式详解

Python Lambda 表达式详解

时间:2024-08-23 21:23:22浏览次数:11  
标签:函数 Python 详解 numbers sorted Lambda 表达式 lambda

Python Lambda 表达式详解

1. 引言

在Python中,lambda表达式是一种创建小型匿名函数的方法。这种函数不需要使用def关键字来定义,通常用于编写简短的函数或作为其他函数的参数。lambda函数可以接受任意数量的参数,但只能有一个表达式,该表达式的结果就是函数的返回值。

2. Lambda 表达式的语法

Lambda表达式的语法如下:

lambda arguments: expression
  • arguments:函数的参数列表,可以有任意数量的参数,参数之间用逗号 , 分隔。
  • expression:一个合法的Python表达式,其计算结果就是函数的返回值。
3. 示例

让我们通过几个简单的例子来了解lambda表达式的使用,并同时展示相应的非lambda写法。

3.1 简单示例

假设我们想定义一个函数,该函数接受两个参数并返回它们的和:

  • Lambda 写法:

    add = lambda x, y: x + y
    print(add(5, 3))  # 输出 8
    
  • 非Lambda 写法:

    def add(x, y):
        return x + y
    
    print(add(5, 3))  # 输出 8
    

在这个例子中,lambda x, y: x + y 定义了一个匿名函数,该函数接受两个参数 xy,并返回它们的和。非lambda写法使用def关键字定义了一个名为add的函数,实现了相同的功能。

3.2 使用内置函数

lambda表达式常用于内置函数如map()filter()sorted()等的参数中。

  • 使用map():

    map()函数接收一个函数和一个可迭代对象作为参数,并将函数应用于可迭代对象中的每一个元素。

    • Lambda 写法:

      numbers = [1, 2, 3, 4, 5]
      squares = map(lambda x: x**2, numbers)
      print(list(squares))  # 输出 [1, 4, 9, 16, 25]
      
    • 非Lambda 写法:

      def square(x):
          return x**2
      
      numbers = [1, 2, 3, 4, 5]
      squares = map(square, numbers)
      print(list(squares))  # 输出 [1, 4, 9, 16, 25]
      
  • 使用filter():

    filter()函数接收一个函数和一个可迭代对象作为参数,并返回一个迭代器,其中包含可迭代对象中使函数返回True的元素。

    • Lambda 写法:

      numbers = [1, 2, 3, 4, 5]
      even_numbers = filter(lambda x: x % 2 == 0, numbers)
      print(list(even_numbers))  # 输出 [2, 4]
      
    • 非Lambda 写法:

      def is_even(x):
          return x % 2 == 0
      
      numbers = [1, 2, 3, 4, 5]
      even_numbers = filter(is_even, numbers)
      print(list(even_numbers))  # 输出 [2, 4]
      
  • 使用sorted():

    sorted()函数可以接收一个key参数,该参数是一个函数,用于指定排序依据。

    • Lambda 写法:

      words = ['banana', 'apple', 'cherry']
      sorted_words = sorted(words, key=lambda word: len(word))
      print(sorted_words)  # 输出 ['apple', 'banana', 'cherry']
      
    • 非Lambda 写法:

      def length(word):
          return len(word)
      
      words = ['banana', 'apple', 'cherry']
      sorted_words = sorted(words, key=length)
      print(sorted_words)  # 输出 ['apple', 'banana', 'cherry']
      
4. Lambda 表达式与普通函数的对比

lambda表达式与普通函数定义(使用def关键字)有一些区别:

  • 语法简洁性:
    lambda表达式在语法上更加简洁,适合于定义简单的、一次性使用的函数。

  • 作用域限制:
    lambda表达式只允许一个表达式,而普通函数可以包含多个语句,包括控制流语句如iffor等。

  • 可读性:
    对于复杂的逻辑,使用def定义的普通函数通常更易于阅读和维护。

  • 灵活性:
    lambda表达式可以在任何地方定义,而普通函数需要在使用前定义。

5. 实际应用场景

lambda表达式非常适合用于需要快速定义简单函数的情况,特别是在函数式编程中常见的场景,如列表推导、映射、过滤等。

5.1 列表推导

使用lambda表达式可以简化列表推导式:

  • Lambda 写法:

    numbers = [1, 2, 3, 4, 5]
    squares = [x**2 for x in numbers]
    print(squares)  # 输出 [1, 4, 9, 16, 25]
    
  • 非Lambda 写法:

    def square(x):
        return x**2
    
    numbers = [1, 2, 3, 4, 5]
    squares = [square(x) for x in numbers]
    print(squares)  # 输出 [1, 4, 9, 16, 25]
    

虽然这不是直接使用lambda表达式,但它展示了如何在列表推导中使用简短的表达式。

5.2 字典排序

假设我们有一个字典,我们想根据它的值来排序:

  • Lambda 写法:

    students = {'Alice': 88, 'Bob': 95, 'Charlie': 70, 'David': 85}
    sorted_students = sorted(students.items(), key=lambda item: item[1], reverse=True)
    print(sorted_students)  # 输出 [('Bob', 95), ('David', 85), ('Alice', 88), ('Charlie', 70)]
    
  • 非Lambda 写法:

    def sort_by_value(item):
        return item[1]
    
    students = {'Alice': 88, 'Bob': 95, 'Charlie': 70, 'David': 85}
    sorted_students = sorted(students.items(), key=sort_by_value, reverse=True)
    print(sorted_students)  # 输出 [('Bob', 95), ('David', 85), ('Alice', 88), ('Charlie', 70)]
    

在这里,lambda item: item[1]用来指定按照字典的值进行排序。

6. 总结

lambda表达式是Python中一种非常有用的特性,尤其是在需要简短、一次性的函数时。尽管它们在某些情况下不如普通函数灵活,但在函数式编程中却有着不可替代的地位。合理使用lambda表达式可以使代码更加简洁高效。然而,在编写复杂逻辑时,使用传统的def定义的函数通常更为合适,因为它们提供了更多的控制结构和更好的可读性。

结论

lambda表达式在Python中是一种简洁且功能强大的工具,适用于快速定义简单的函数。它们特别适合用于那些只需要短暂存在的函数,以及需要传递函数作为参数的场合。通过结合内置函数如map()filter()sorted()lambda表达式可以极大地提高代码的效率和可读性。通过比较lambda写法和非lambda写法,我们可以更好地理解它们各自的适用场景和优缺点。

标签:函数,Python,详解,numbers,sorted,Lambda,表达式,lambda
From: https://blog.csdn.net/TalorSwfit20111208/article/details/141474924

相关文章

  • Python时间戳转换为标准时间
    前置知识北京时间是中华人民共和国全境采用的国家标准时间(UTC(NTSC)或CST),是首都北京所在的东八时区的区时。北京时间比格林威治时间(GreenwichMeanTime简称GMT)早8小时。协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称U......
  • python-flask计算机毕业设计中小学精品课程网络资源系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,教育领域正经历着前所未有的变革。互联网技术的普及,使得优质教育资源的共享成为可能,为教育公平与质量提升提供了强......
  • python-flask计算机毕业设计校园疫情检测信息管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着全球疫情的持续影响,校园作为人员密集、流动性大的特殊场所,其疫情防控工作显得尤为重要。传统的手工记录、纸质申报等管理方式已难以满......
  • 【python2-2】数据类型
    整型intinput()里面输出的都是字符串类型的,要转换成int类型在进行加减乘除num=input('请输入一个数字:')print(type(num))num=int(num)+10print(num)浮点数产生误差:采用round四舍五入:n1=0.1n2=0.2n3=round(n1+n2,2)print(n3)取整操作:向上取整......
  • 【python1-3】input()函数
    一般配合变量使用,把input()放进去a=input()print(a)可以增加输入提示a=input('请输入你的名字:')print(a)任务2要类型一样才能加减,把字符串变成整型age=input('请输入你的年龄:')age=int(age)year=2024birth=year-ageprint('出生日期是',birth)......
  • 【python2-1】变量
    变量的创建price=10.5weight=7.5money=price*weightprint('总消费是%.2f元'%money)变量的修改year=2023print(year)year=2024print(year)money=10money='10元'print(money)快速注释:CTRL+左斜杠/price=10.5weight=7.5money=pr......
  • python——redis
    1.什么是Redis?Redis是一种高性能的键值存储数据库,它不仅可以存储字符串,还可以存储复杂的数据结构如列表、集合、哈希等。Redis常用于缓存、会话管理、实时数据处理等场景。2.环境准备在使用Redis之前,需要安装Redis服务器和Redis的Python客户端库。2.1安装......
  • 计算机网络——TCP协议与UDP协议详解(下)
    一、TCP协议1.1TCP协议的报文TCP全称为"传输控制协议(TransmissionControlProtocol")。人如其名,要对数据的传输进行一个详细的控制。我们先看其报文格式,如下图:TCP报文由以下几个字段组成:源端口号和目标端口号:每个TCP连接都有一个源端口号和一个目标端口号。源端口号......
  • 回归预测|基于卷积神经网络-长短期记忆网络-自注意力机制的数据回归预测Python程序 多
    回归预测|基于卷积神经网络-长短期记忆网络-自注意力机制的数据回归预测Python程序多特征输入单输出CNN-LSTM-Attention文章目录前言回归预测|基于卷积神经网络-长短期记忆网络-自注意力机制的数据回归预测Python程序多特征输入单输出CNN-LSTM-Attention一、CNN-......
  • C语言数组介绍(详解)
    数组目录数组概念一维数组⼀维数组的创建和初始化一维数组的基本创建一维数组的初始化数组的类型一维数组的使用数组下标数组元素的打印数组的输入一维数组内存中的储存如何用sizefo计算数组元素个数二维数组二维数字的概念二维数组的创建二维数组的初始化二维数组的......