Python sorted 函数:Key参数,以及lambda 函数与常规写法区别
第一种方式:
ous = sorted(ouFilter.ous, key=lambda ou:ou.path)
- 使用
lambda
函数作为排序的关键字,这是一个简洁、明了的方式。lambda
函数在 Python
中表示一个简
单的匿名函数,它没有自己的名字,因此在代码中不需要为它预留名字。在排序的上下文中,key 参数通
常用于指定一个函数,该函数应用在输入序列的每一个元素上,其返回值被排序函数使用
第二种方式:
def key(ou):
return ou.path
ous = sorted(ouFilter.ous, key=key)
- 这里定义了一个名为
key
的函数,然后将其作为参数传递给 sorted
函数。虽然这也是有效的,但它的可读
性稍差。在一般的编程实践中,如果一个函数被只使用一次,那么使用 lambda
函数会更简洁,也更具可
读性。如果 key
函数需要在多个地方反复使用,那么定义一个完整的函数是合理的。
Key 参数解释说明:
words = ["banana", "apple", "cherry", "date"]
sorted_words = sorted(words, key=len)
print(sorted_words)
- 你会发现 在这里是不需要使用
len(x)
这样的格式,甚至连括号都不需要,因为 sorted
函数的 key
参数,
用于指定一个函数,该函数将被应用于每个元素,根据返回的结果进行排序。默认值为 None
,表示按
照元素的原始值进行排序。
Lambda 函数:
def add(a, b):
return a+b
print(add(2,3))
add = lambda a, b: a + b
print(add(2,3))
- 你会发现 : 好像
lambda
就是省略了一个函数名,省略了一个 return
的关键词单词,然后把 def
替换为 lambda
,再把函数的 ()
前后两个括号去掉,把两行代码改为一行~~~
Demo 示例:
list1 = [19, 32, 76, 82, 23, 63, 38, 50, 20, 30, 39, 14, 19, 50, 81, 27, 77, 12, 55, 29]
a = sorted(list1, key=lambda x: x%2 == 0)
print(a)
如果上面的 lambda 函数 改为常规的写法 则是如下:
list1 = [19, 32, 76, 82, 23, 63, 38, 50, 20, 30, 39, 14, 19, 50, 81, 27, 77, 12, 55, 29]
def demo(x):
return x % 2 == 0
a = sorted(list1,key=demo)
print(a)