zoukankan      html  css  js  c++  java
  • Python函数式编程学习笔记

    • High order function
    1. map(f,Iterable),将f依次作用在Iterable的每个元素然后返回一个Iterator,再用list(map(f,Iterable))进行转换得到一个Iterable的结果;
    2. reduce(f,Iterable),函数f必须接收两个参数[如f(x,y),x表示之前的累积结果,y表示当前要参与运算的序列中的一个元素],reduce返回一个累积结果;
    3. filter(f,Iterable),筛选函数,将f依次作用在序列中的每个元素,若结果为true则保留元素,最终得到一个Iterator;
    4. sorted(Iterable,key=f),排序函数,按照f返回的结果作为key值进行自定义排序返回一个Iterable;   sorted(Iterable,key=f,reverse=True)表示进行反向排序。
    • 返回函数
    1. 在函数中定义函数,且外部函数返回所定义的函数,当调用外部函数时,相关变量和参数都保存在返回函数中,且返回函数并没有立刻执行,而是直到调用返回函数时才会执行;
    2. 每次调用外部函数f都会返回一个新函数g,每个返回的函数即使有传入相同参数,g1!=g2;
    3. 返回函数中不能引用任何循环变量或者可能会变化的变量。
    • 匿名函数

    用lambda关键字表示,lambda x: x*x,冒号前面的x为参数,之后的为返回值。

    • 装饰器

    1.装饰器的作用是为已经存在的对象添加额外的功能,而不改变已有对象本身,如插入日志、性能测试、事务处理、缓存、权限验证等场景;

    2. 附上对一个作业题答案的理解:同时支持带参数或者不带参数的log。

    import functools
    def log(params):
        def decorate(func):
            @functools.wraps(func)#保证调用时的函数__name__属性不变
            def wrapper(*args, **kw):
                output = '%s %s()' % (params, func.__name__) or ('call %s()' % func.__name__)
                print(output)
                return func(*args, **kw)
            return wrapper
        if hasattr(text,'__call__'): #说明是无参数版本
             func = params
             params = None
             return decorate(func) #应该是类似调用deorate()函数,返回一个wrapper;此处若没有前两句,直接return decorate(params),print出的文本是对函数的一个说明
        else:
            return decorate #带参版log,直接返回一个decorate函数
    @log #语法糖
        def now():
            print('I am now!')
    • 偏函数

    来自functools.partial 用来帮助创建一个偏函数,即把一个函数的某些参数设置默认值。e.g. int2=functools.partial(int,base=2) 把二进制字符串转为整数。

  • 相关阅读:
    JavaScript设计模式与开发实践
    ECMAScript 6入门
    时间管理微课程:值得永久收藏的25条时间管理技巧
    day14.生成器迭代器作业
    windows下创建MySQL定时备份与删除脚本
    day14.生成器进阶,推导式
    day13.装饰器进阶,迭代器
    day12.生成器;wraps初识
    day11.装饰器初识
    day10.函数升级
  • 原文地址:https://www.cnblogs.com/nora/p/6076853.html
Copyright © 2011-2022 走看看