高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
map函数
map() 函数接收两个参数,一个是函数,一个是序列, map 将传入的函数依次作用到序列的每个元素,并把结果作为新的 list 返回
reduce函数
reduce 把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce 把结果继续和序列的下一个元素做累积计算
filter():filter函数接受函数参数f和列表参数lst,f对lst元素进行判断,返回lst的元素中调用f函数结果为true的元素组成的列表(将不满足f函数条件的元素过滤掉):
在一个 list 中,删掉偶数,只保留奇数:
sorted函数
• 排序也是在程序中经常用到的算法。 无论使用冒泡排序还是快速
排序,排序的核心是比较两个元素的大小。通常规定如下:
x < y, return -1
x == y, return 0
x > y, return 1
相反定义返回值相反:
高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。
函数作为返回值
调用 lazy_sum() 时,每次调用都会返回一个新的函数,即使传入相同的参数
匿名函数
#[1,2,3...10]
# [1,4,9,....100]
# 匿名函数的优势:
# 1). 匿名函数不需要函数名,可以避免函数名的冲突;
# 2). 匿名函数可以跳过给函数分配栈空间;
def pow1(x):
return x*x
print map(pow1,range(1,11))
print map(lambda x:x*x, range(1,11))
# 匿名函数可以赋值给一个变量,需要运行时,变量名()
f = lambda :1
print f()
# 匿名函数传递必选参数和默认参数
f = lambda x,y=2:x**y
print f(2,3)
print f(2)
# 匿名函数传递可变参数
f = lambda *x:map(lambda x:x+x,x)
print f(1,2,3,4)
# 匿名函数传递关键字参数
f = lambda **kwargs:kwargs.items()
print f(name="fentiao",age=5)
#练习:利用匿名函数和字典重新编辑计算器的代码。
装饰器:用来装饰函数的一个函数
添加功能,装饰函数;
# 1). 不修改函数的源代码;
# 2). 函数的调用方式没有改变