python 高阶函数 map reduce filter sorted 闭包 装饰器
2017-02-07 18:31
951 查看
高阶函数英文叫Higher-order function
1.map
map(func, seq,seq.....)
例如: map(lambda x,y:x+y, range(0, 10), range(0, 10))
相当于: map(lambda x, x*2, range(0, 10))
结果:[0, 2, 4, 6, 8....]
用map实现0,100的加法,就显得力不从心了,不过用下面的方法,简单许多。
2.reduce
reduce(func, seq, init)
其中:func 为二元参数的函数,seq 为序列, init是初始值,
每次获取的两个元素为:上次结果 +此次去除元素
例如:reduce(lambda x,y: x+y, range(0, 101), 0)
结果:5050
特性:取上次结果作为参数
map虽然可以同时遍历两个序列,但是两个序列长度不同的时候,就不太‘优雅’了,此时zip 来了
3.zip
zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]
例如:zip(l1, l2, l3) (l1 = range(0, 10), l2=range(1, 10, 2), l3=range(0, 10, 2))
特性:zip 可以将不同长度的序列,以最短的序列为标准,构造成元组列表,元组元素来自于各个序列
所以:在使用map进行操作的时候,如果是多个序列,可以先通过zip‘统一化’,然后由函数处理
4.filter
filter(bool_func, seq)
例如: filter(lambda x: x%2 == 0, range(0, 11))
结果:[0, 2, 4, 6, 8, 10]
特性:只有两个参数,一个是返回值为bool类型的函数, 另外一个是待过滤的序列
filter 的参数函数返回的为bool型的, 下面的sorted的函数也大同小异
5.sorted
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
第一个是可迭代对象,cmp为比较函数,返回0, 1, -1
key用来指定比较关键字,默认为第一项,若是每个元素有多项内容,可以在这里指定
reverse,bool值表示是否逆置
例如:
5.闭包
闭包是指可以包含自由(未绑定到特定对象)变量的代码块;
这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。
“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)
和为自由变量提供绑定的计算环境(作用域)
python 中支持返回值为函数
此时只要是稍加改变就形成了“闭包”
python中实现方法:
函数中内定义函数,内部定义的函数引用了来自外部函数的值,外部函数返回值为内部定义的函数
def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return sum
当只是对外部函数调用,会获得一的返回的函数,此函数持有外部函数变量
注意:被内部函数引用的变量 尽量不要变化,否则,会出现想不到的结果
g
6.装饰器
简单日志装饰器
g
log(func):
def wrapper(*args, **kwargs):
print " call %s " % func.__name__ # 注意func.__name__
为函数,或者对象名
func(*args, **kwargs)
return wrapper
使用:
@log
def now()
print “123”
now()
结果:call now
123
基本原理:
执行的时候,先调用装饰函数,然后装饰函数内部进行真实函数的调用
此时 now =log(now)
简单的说装饰器,就是为了在原有功能(代码不修改)基础上,添加新的功能,进行装饰
详细的,如果带有参数,只需在装饰器外加一层处理参数的代码即可
def log(text):
def decorator(func):
def wrapper(*args, **kw):
print '%s %s():' % (text, func.__name__)
return func(*args, **kw)
return wrapper
return decorator
此时 :now = log('execute')(now)
g
注意,此处就用到了闭包哦
1.map
map(func, seq,seq.....)
例如: map(lambda x,y:x+y, range(0, 10), range(0, 10))
相当于: map(lambda x, x*2, range(0, 10))
结果:[0, 2, 4, 6, 8....]
用map实现0,100的加法,就显得力不从心了,不过用下面的方法,简单许多。
2.reduce
reduce(func, seq, init)
其中:func 为二元参数的函数,seq 为序列, init是初始值,
每次获取的两个元素为:上次结果 +此次去除元素
例如:reduce(lambda x,y: x+y, range(0, 101), 0)
结果:5050
特性:取上次结果作为参数
map虽然可以同时遍历两个序列,但是两个序列长度不同的时候,就不太‘优雅’了,此时zip 来了
3.zip
zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]
例如:zip(l1, l2, l3) (l1 = range(0, 10), l2=range(1, 10, 2), l3=range(0, 10, 2))
特性:zip 可以将不同长度的序列,以最短的序列为标准,构造成元组列表,元组元素来自于各个序列
所以:在使用map进行操作的时候,如果是多个序列,可以先通过zip‘统一化’,然后由函数处理
4.filter
filter(bool_func, seq)
例如: filter(lambda x: x%2 == 0, range(0, 11))
结果:[0, 2, 4, 6, 8, 10]
特性:只有两个参数,一个是返回值为bool类型的函数, 另外一个是待过滤的序列
filter 的参数函数返回的为bool型的, 下面的sorted的函数也大同小异
5.sorted
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
第一个是可迭代对象,cmp为比较函数,返回0, 1, -1
key用来指定比较关键字,默认为第一项,若是每个元素有多项内容,可以在这里指定
reverse,bool值表示是否逆置
例如:
def reversed_cmp(x, y): if x > y: return -1 if x < y: return 1 return 0 l = [random.randint(0, 100) for i in range(10)] sorted(l, reversed_cmp) 结果:[85, 73, 68, 51, 46, 35, 29, 24, 8, 0]
5.闭包
闭包是指可以包含自由(未绑定到特定对象)变量的代码块;
这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。
“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)
和为自由变量提供绑定的计算环境(作用域)
python 中支持返回值为函数
此时只要是稍加改变就形成了“闭包”
python中实现方法:
函数中内定义函数,内部定义的函数引用了来自外部函数的值,外部函数返回值为内部定义的函数
def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return sum
当只是对外部函数调用,会获得一的返回的函数,此函数持有外部函数变量
注意:被内部函数引用的变量 尽量不要变化,否则,会出现想不到的结果
g
6.装饰器
简单日志装饰器
g
log(func):
def wrapper(*args, **kwargs):
print " call %s " % func.__name__ # 注意func.__name__
为函数,或者对象名
func(*args, **kwargs)
return wrapper
使用:
@log
def now()
print “123”
now()
结果:call now
123
基本原理:
执行的时候,先调用装饰函数,然后装饰函数内部进行真实函数的调用
此时 now =log(now)
简单的说装饰器,就是为了在原有功能(代码不修改)基础上,添加新的功能,进行装饰
详细的,如果带有参数,只需在装饰器外加一层处理参数的代码即可
def log(text):
def decorator(func):
def wrapper(*args, **kw):
print '%s %s():' % (text, func.__name__)
return func(*args, **kw)
return wrapper
return decorator
此时 :now = log('execute')(now)
g
注意,此处就用到了闭包哦
相关文章推荐
- 【语言工具】Python闭包,装饰器,生成器,偏函数,函数式编程,lamda,map,reduce,filter
- python学习(9)高阶函数map、reduce、filter、sorted
- Python3中的高阶函数(map,reduce,filter,sorted)
- python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))
- Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊
- Python 函数式编程(高阶函数、把函数作为参数、map()函数、reduce()函数、filter()函数、自定义排序函数、函数返回函数、闭包、匿名函数、装饰器decorator)
- Python函数式编程(高阶函数 <map/reduce filter sorted> 返回函数 匿名函数 装饰器 偏函数)
- Python学习 Day 5 高阶函数 map/reduce filter sorter 返回函数 匿名函数 装饰器 偏函数
- Python学习2--高阶函数map、reduce、filter、sorted
- Python 函数式编程--高阶函数Map、Reduce、Filter、Sorted
- Python高阶函数——map/reduce/filter/sorted
- Python教程学习简记8--Python 高阶函数 map/reduce filter sorted
- python——高阶函数——map reduce filter sorted
- python中的高阶函数map(),reduce(),filter()的区别
- python基础之map/reduce/filter/sorted
- python学习笔记(九)函数式进阶:使用map、reduce、filter、sorted
- python学习笔记,map/reduce,filter,sorted
- Python函数式编程(高阶函数、map()、reduce()、filter()、sorted()、lambda、decorator装饰器)
- 【转】python的内建函数:filter,map,reduce,lambda,sorted等
- Python高阶函数:filter、map、reduce、lambda