知识点1
什么是lambda 函数
在 Python 中,lambda 是一种创建匿名函数的方式。匿名函数是指没有显式名称的函数,通常用于简单的操作,尤其是在需要临时函数时。lambda 函数的语法简洁,非常适合在需要函数对象但又不想定义完整函数的情况下使用。
lambda函数在min()函数中的使用
在 min() 函数中,lambda 函数通常被用作 key 参数的值。key 参数的作用是告诉min() 函数如何比较元素。具体来说,key 参数接收一个函数,该函数会对每个元素进行处理,返回一个值,min() 函数会根据这些返回值来比较元素的大小,而不是直接比较元素本身。
知识点2
lambda
的基本语法
lambda arguments: expression
-
arguments
:可以有零个或多个参数,用逗号分隔。 -
expression
:是一个表达式,lambda 函数会返回这个表达式的结果。
案例1
-
定义字符串列表:
strs = ["hello", "world", "hao", "best"]
这里定义了一个包含四个字符串的列表 strs。
-
使用
min()
函数:min(strs, key=lambda s: len(s))
-
min() 函数用于找出可迭代对象(如列表、元组等)中的最小值。
-
key 参数指定了一个函数,该函数会对每个元素进行处理,返回一个值,min() 函数会根据这些返回值来比较元素的大小。
-
lambda s: len(s) 是一个匿名函数(lambda 函数),它接收一个字符串 s,并返回该字符串的长度 len(s) 。
-
-
输出结果:
print(min(strs, key=lambda s: len(s))) # 输出结果:hao
-
min() 函数会调用 lambda 函数,对每个字符串计算长度,然后根据长度来比较字符串,最终返回长度最短的字符串。
-
在这个例子中,字符串 "hao" 的长度最短(长度为 3),因此输出结果为 "hao"。
-
案例2
代码中的__init__说明:
__init__ 是 Python 中的一个特殊方法,称为类的构造函数。当你创建一个新的类时,可以定义一个 __init__ 方法来初始化新创建的对象的属性。这个方法在创建类的新实例时自动调用。
__init__
方法的作用
__init__ 方法的主要作用是为类的实例变量(属性)赋值。当你创建一个类的新对象时,你可以传递参数给 __init__ 方法,这些参数可以用来设置对象的状态。
为什么使用 __init__
使用__init__ 方法的原因包括:
-
初始化属性:为新对象设置初始状态。
-
接收参数:允许在创建对象时传递参数,这些参数可以用来定制对象的行为或状态。
-
封装性:将对象的创建和初始化封装在类内部,使得对象的创建和管理更加清晰和方便。
代码解释
-
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 )是处理对象时非常常见的做法,它允许你访问和操作对象的内部数据。在实际编程中,通常会根据需要从对象中提取和使用特定的属性。