python学习笔记(四)--函数式编程

1、高阶函数:

高阶函数( Higher-order function):
1、变量可以指向函数:函数本身也可以赋值给变量。
2、函数名也是变量:指向函数的变量。
3、传入函数:变量能够指向函数,函数的参数能接收变量,一个函数就可以接收另一个函数作为参数。

接收两个参数:函数,iterable
map():将传入的函数依次作用到序列的每个元素,并把结果作为一个新的iterator返回。
reduce():把结果继续和序列的下一个元素做计算。
filter():用于过滤序列。把传入的函数作用于序列的每个元素,根据返回结果true/false决定保留还是丢弃该元素。

map()、filter() 函数返回的是一个 Iterator ,也就是一个惰性序列,所以要强迫 filter() 完成计算结果,需要用 list() 函数获得所有结果并返回list。

sorted():排序函数。
1、可以对list进行排序;
2、可以接收一个key函数实现自定义排序。如:key = abs
用sorted()排序的关键在于实现一个映射函数。

2、返回函数与匿名函数:

返回函数:函数作为返回值。
在函数中定义函数,内部函数可以引用外部函数的参数和局部变量,当外部函数返回函数时,相关参数和变量都保存在返回的函数中,这种是成为“闭包”的程序结构。

闭包:当一个函数返回了一个函数后,其内部的局部变量还被新函数引用。
返回的函数并不立即执行,而是调到才执行。
 返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
如果一定要用到循环,就再创建一个函数,用该函数的参数绑定当前循环变量的值,无论循环变量的值怎么改变,已经绑定到函数参数的值不变。

匿名函数(lambda):不显示定义函数,直接传入匿名函数。
lambda x : 函数冒号前x表示参数。(可以没有参数)
匿名函数只能有一个表达式,不用写return,返回值就是该表达式的结果。
不会有函数名冲突的问题,匿名函数也是一个函数对象,可以赋值给变量,在利用变量调用该函数。

3、装饰器:

函数对象有 _name_属性,可以拿到函数名。f._name_
装饰器(decorator):在代码运行期间动态增加功能的方式。
需要使用Python的@语法,将装饰器置于函数定义处。@函数名
把装饰器放在函数定义处,相当于执行:函数名 = 装饰器(函数名)
经过装饰器的函数,名称已经改变,需要把原始函数的_name_属性复制到wrapper()中。
python内置的functools.wraps可以把原始函数名复制到wrapper()中。
在wrapper()函数定义前面加上@functools.wraps(fun)
import functools
def log(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper

4、偏函数:

偏函数(partial function):functools.partial 把一个函数的某些参数固定住(设置默认值),返回一个新的函数。
通过设置参数的默认值,降低调用函数的难度。
int():把字符串转换为整数。
int(‘123’,base = 10):base参数是几进制的转换,默认为10。
把int()默认值设为2进制: int2 = functools.partial(int, base= 2 )
新函数只是改变了参数默认值,还可以传入其他参数。
创建偏函数时,可以接收函数对象、*args、**kw 这三个参数。
当函数的参数个数太多,需要简化时,可以调用functools.partial 创建一个新的函数,这个函数可以固定住原函数的部分参数,使调用简单。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值