• 学习8: 内建函数,匿名函数,偏函数


    1. map(function,sequence)

    map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回

    >>> map(abs, [-1,2,0,-9])
    [1, 2, 0, 9]
    >>> map(str, (1,2,3))
    ['1', '2', '3']
    >>>

    2. reduce

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

    reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

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

    3. filter

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

    def test(x):
        if x%3 == 0:
            return True
        else:
            return False
    
    print filter(test, [2,3,4,6])

    4. sorted

    Python list内置sort()方法用来排序, 但是list.sort()方法仅被定义在list中,只能作用于list。

    而sorted()方法就是全局的,它对任何可迭代的序列排序生成新的序列。

    >>> a=[9,7,0,3,5,2]
    >>> id(a)
    48400392L
    >>> a.sort()
    >>> a
    [0, 2, 3, 5, 7, 9]
    >>> id(a)
    48400392L
    >>> 
    >>> a=[9,7,0,3,5,2]
    >>> sorted(a)
    [0, 2, 3, 5, 7, 9]
    >>> a
    [9, 7, 0, 3, 5, 2]
    >>> 

    从上面可以看出使用list.sort()方法来排序,此时list本身将被修改,而用sorted()方法会返回一个新的list,不影响原先list。

    5. lambda

    关键字lambda表示匿名函数。

    lambda会创建一个函数对象,但不会把这个函数对象赋给一个变量,而def则会把函数对象赋值给一个变量。

    另外lambda只是一个表达式,而def则是一个语句。简单的说在def中,用return可以返回的也可以放在lambda后面,不能用return返回的也不能定义在python lambda后面。因此,像if或for这种语句就不能用于lambda中,lambda一般只用来定义简单的函数。

    >>> f = lambda x:x*2
    >>> f(3)

    6.偏函数

    通过functools.partial帮助我们创建一个偏函数,作用就是把一个函数的某些参数给固定住(也就是设置默认值)返回一个新的函数,

    调用这个新函数会更简单,而且不用更改原始函数。

    import functools
    def test(x,y):
        print x+y
    
    test2=functools.partial(test,y=2)
    test2(3)

    这里函数test定义了两个参数,如果某种情况下y一直是2的情况,那么我们可以重新生成一个新的函数test2将参数y给固定,

    然后调用test2就相对简单一点,而且没有更改原先的函数。 当然也可以更改原先函数设置默认值即可,如下:

    def test(x, y=2):
        print x+y
    test(4)
  • 相关阅读:
    [2017-7-28]Android Learning Day7
    Codeforces Round #402 (Div. 2) D. String Game
    POJ2411 铺地砖 Mondriaan's Dream
    《大型网站系统架构的演化》
    Nginx 引入线程池,提升 9 倍性能
    《淘宝消息中间件概述》2015-07-11
    主从复制源代码分析
    深入剖析Redis主从复制
    主从复制配置
    Redis启动多端口、运行多实例
  • 原文地址:https://www.cnblogs.com/lypy/p/6377263.html
Copyright © 2020-2023  润新知