zoukankan      html  css  js  c++  java
  • python函数式编程

    1 把函数赋值给变量
    >>> f = abs
    >>> f(-10)
    10
    2 高阶函数
    def add(x, y, f):
    return f(x) + f(y)
    3 map 函数接收两个参数,一个是函数,一个是序列,传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

    >>> def f(x):
    ...     return x * x
    ...
    >>> map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
    [1, 4, 9, 16, 25, 36, 49, 64, 81]

    4  reduce。reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算

    >>> def fn(x, y):
    ...     return x * 10 + y
    ...
    >>> reduce(fn, [1, 3, 5, 7, 9])
    13579

    5.filter:filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

    def is_odd(n):
        return n % 2 == 1
    
    filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])
    # 结果: [1, 5, 9, 15]
    def not_empty(s):
        return s and s.strip()
    
    filter(not_empty, ['A', '', 'B', None, 'C', '  '])
    # 结果: ['A', 'B', 'C']

    6.sorted:进行排序并可指定排序函数

    >>> sorted([36, 5, 12, 9, 21])
    [5, 9, 12, 21, 36]
    def reversed_cmp(x, y):
        if x > y:
            return -1
        if x < y:
            return 1
        return 0
    
    >>> sorted([36, 5, 12, 9, 21], reversed_cmp)
    [36, 21, 12, 9, 5]

    7.函数作为返回值

    def lazy_sum(*args):
        def sum():
            ax = 0
            for n in args:
                ax = ax + n
            return ax
        return sum
    >>> f = lazy_sum(1, 3, 5, 7, 9)
    >>> f()
    25

    8.匿名函数

    >>> map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])
    [1, 4, 9, 16, 25, 36, 49, 64, 81]

      冒号前面的x表示函数参数。

      匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

     把匿名函数赋值给变量

    >>> f = lambda x: x * x
    >>> f
    <function <lambda> at 0x10453d7d0>
    >>> f(5)
    25

    返回匿名函数

    def build(x, y):
        return lambda: x * x + y * y

    9 装饰器

    def log(func):
        def wrapper(*args, **kw):
            print 'call %s():' % func.__name__
            return func(*args, **kw)
        return wrapper
    @log
    def now():
        print '2013-12-25'

    10 偏函数:把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。

    >>> import functools
    >>> int2 = functools.partial(int, base=2)
    >>> int2('1000000')
    64
    >>> int2('1010101')
    85
    def int2(x, base=2):
        return int(x, base)
  • 相关阅读:
    (转)当你输入一个网址,实际会发生什么?
    Word Ladder II
    Jump Game II
    Candy
    [生成树][Uva1395][Slim Span]
    [AC自动机][HDU3065]
    [KMP求最小循环节][HDU3746][Cyclic Nacklace]
    [扩展KMP][HDU3613][Best Reward]
    [Manacher][HDU3613][Best Reward]
    [KMP][HDU3336][Count the string]
  • 原文地址:https://www.cnblogs.com/wuyong09/p/5694729.html
Copyright © 2011-2022 走看看