【Python】高阶函数(2)

来源:互联网 发布:网络销售什么经营范围 编辑:程序博客网 时间:2024/06/05 03:22

sorted()

sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序。key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。


练习:

假设我们用一组tuple表示学生名字和成绩:

L = [(‘Bob’, 75), (‘Adam’, 92), (‘Bart’, 66), (‘Lisa’, 88)]

请用sorted()对上述列表分别按名字排序。
代码如下:

#对名字进行排序L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]def by_name(t):    return t[0].lower()L2 = sorted(L, key = by_name)print(L2)  
#对分数进行排序L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]def by_score(t):    return t[1].lower()L2 = sorted(L, key = by_score)print(L2)

【分析】
L列表中的每个元素都是一个元组,首先按名字排序,key作用与排序中列表里的每一个元素,所以传入by_name里的参数t是一个元组,需要对元组的第一个元素进行排序,所以是t[0]。


函数作为返回值

在函数f()中有定义了g(),并且部内函数g()可以引用外部分数f()的参数和局部变量,当f()返回函数g()时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)。
注意:返回函数不要引用任何循环变量,或者后续会发生变化的变量。如果一定要引用循环变量怎么办?方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变。

匿名函数

匿名函数lambda x: x * x实际上就是:

def f(x):    return x * x

关键字lambda表示匿名函数,冒号前面的x表示函数参数。
匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

原创粉丝点击