lambda 函数与 min() 函数的结合使用场景

知识点1

什么是lambda 函数

在 Python 中,lambda 是一种创建匿名函数的方式。匿名函数是指没有显式名称的函数,通常用于简单的操作,尤其是在需要临时函数时。lambda 函数的语法简洁,非常适合在需要函数对象但又不想定义完整函数的情况下使用。

lambda函数在min()函数中的使用

在 min() 函数中,lambda 函数通常被用作 key 参数的值。key 参数的作用是告诉min() 函数如何比较元素。具体来说,key 参数接收一个函数,该函数会对每个元素进行处理,返回一个值,min() 函数会根据这些返回值来比较元素的大小,而不是直接比较元素本身。

知识点2

lambda 的基本语法

lambda arguments: expression
  • arguments:可以有零个或多个参数,用逗号分隔。

  • expression:是一个表达式,lambda 函数会返回这个表达式的结果。

案例1

  1. 定义字符串列表

    strs = ["hello", "world", "hao", "best"]

    这里定义了一个包含四个字符串的列表 strs。

  2. 使用 min() 函数

    min(strs, key=lambda s: len(s))
    • min() 函数用于找出可迭代对象(如列表、元组等)中的最小值。

    • key 参数指定了一个函数,该函数会对每个元素进行处理,返回一个值,min() 函数会根据这些返回值来比较元素的大小。

    • lambda s: len(s) 是一个匿名函数(lambda 函数),它接收一个字符串 s,并返回该字符串的长度 len(s) 。

  3. 输出结果

    print(min(strs, key=lambda s: len(s)))   # 输出结果:hao
    • min() 函数会调用 lambda 函数,对每个字符串计算长度,然后根据长度来比较字符串,最终返回长度最短的字符串。

    • 在这个例子中,字符串 "hao" 的长度最短(长度为 3),因此输出结果为 "hao"。

案例2

代码中的__init__说明:

__init__ 是 Python 中的一个特殊方法,称为类的构造函数。当你创建一个新的类时,可以定义一个 __init__ 方法来初始化新创建的对象的属性。这个方法在创建类的新实例时自动调用。

__init__ 方法的作用

__init__ 方法的主要作用是为类的实例变量(属性)赋值。当你创建一个类的新对象时,你可以传递参数给 __init__ 方法,这些参数可以用来设置对象的状态。

为什么使用 __init__

使用__init__ 方法的原因包括:
  1. 初始化属性:为新对象设置初始状态。

  2. 接收参数:允许在创建对象时传递参数,这些参数可以用来定制对象的行为或状态。

  3. 封装性:将对象的创建和初始化封装在类内部,使得对象的创建和管理更加清晰和方便。

代码解释

  • Student 是一个类名。

  • __init__ 是类的构造函数,它在创建 Student 类的新实例时被调用。

  • __init__ 方法接受两个参数:self 和 name,以及 height。

    • self 是对当前对象实例的引用,它允许访问类的属性和方法。

    • name和 height是传递给构造函数的参数,用于初始化对象的属性。

第一行代码
print(min(students, key=lambda student: student.height))
  • 这行代码使用min() 函数找出students 列表中身高最矮的学生对象。

  • key=lambda student: student.height 是一个 lambda 函数,它告诉min() 函数根据每个学生的 height 属性来比较他们。

  • min() 函数返回的是身高最矮的学生对象本身,而不是对象的某个属性。

  • 因此,直接打印这个对象会显示对象的默认字符串表示形式,即对象的类名和内存地址(例如 <__main__.Student object at 0x0000015810CBC1A0>)

第二行代码
print(min(students, key=lambda student: student.height).name)
  • 这行代码同样使用 min() 函数找出students 列表中身高最矮的学生对象。

  • 但是,这次它直接从返回的学生对象中提取并打印 name 属性。

  • 因此,输出结果是身高最矮的学生的名字,即 Ali。

总结
  • 第一行代码直接打印了min() 函数返回的学生对象,导致输出了对象的内存地址。

  • 第二行代码从 min() 函数返回的学生对象中提取并打印了 name 属性,从而得到了预期的输出结果。

这种直接访问对象属性的方法(如 .name )是处理对象时非常常见的做法,它允许你访问和操作对象的内部数据。在实际编程中,通常会根据需要从对象中提取和使用特定的属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HaoChen/ChenHao

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值