美文网首页
python学习(三)函数式编程

python学习(三)函数式编程

作者: attentionYSF | 来源:发表于2019-06-03 11:33 被阅读0次

    高阶函数

    函数也是变量,函数参数为函数的函数,称作高阶函数

    • 自定义高阶函数
    f = abs
    myAbs(-3, f)   --3
    def myAbs(n, f):
        return f(n)
    
    • 内建高阶函数

    map/reduce
    map:iterator map(function, iterable),function作用于iterable
    reduce:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4),f必须接收两个参数

    filter
    iterator map(function, iterable),function作用于iterable,然后根据返回值是True还是False决定保留还是丢弃该元素

    def is_odd(n):
        return n % 2 == 1
    list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
    
    结果: [1, 5, 9, 15]
    

    sorted
    iterator sorted(iterable, key=function),function作用于iterable,根据function返回值进行排序;不要key,则默认从小到大顺序排列

    sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
    结果:['about', 'bob', 'Credit', 'Zoo']
    
    def sortFunc(t):
       return abs(t[1])
    L = [('Bob', 75), ('Adam', -92), ('Bart', 66), ('Lisa', 88)]
    L = sorted(L, key=sortFunc)
    print(L)
    结果:[('Bart', 66), ('Bob', 75), ('Lisa', 88), ('Adam', -92)]
    
    • 返回函数

    函数里面返回函数,在函数第二次调用时生效。
    牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量

    闭包计数器
    def createCounter1():
        li = [0]
        def counter():
            li.append(li[-1] + 1)
            return li[-1]
        return counter
        
    f = createCounter1();
    print(f())  
    print(f())
    print(f())
    print(f())
    print(f())
    1
    2
    3
    4
    5
    
    • 匿名函数
    x就是参数
    f = lambda x: x * x
    f(5)   --25
    
    • 装饰器函数

    想在函数执行的前后加入打印日志,类似面向切面编程的概念

    import functools
    ----不带参数的装饰器函数
    def log(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('call %s():' % func.__name__)
            return func(*args, **kw)
        return wrapper
    
    ----带参数的装饰器函数
    import functools
    
    def log(text):
        def decorator(func):
            //将wrapper.__name__的属性名改为func.__name__
            @functools.wraps(func)
            def wrapper(*args, **kw):
                print('%s %s():' % (text, func.__name__))
                return func(*args, **kw)
            return wrapper
        return decorator
    
    @log
    def now():
        print('2015-3-25')
    
    执行 -- now()
    
    • 偏函数

    functools.partial(int, 参数)创建一个偏函数

    import functolls
    
    int2 = functools.partial(int, base=2)二进制
    int2(4)    --100
    

    相关文章

      网友评论

          本文标题:python学习(三)函数式编程

          本文链接:https://www.haomeiwen.com/subject/ozlmtctx.html