• python初步学习-python函数 (二)


    几个特殊的函数(待补充)

    python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数:
    filter、map、reduce、lambda、yield

    lambda

    >>> g = lambda x,y:x+y  #x+y,并返回结果
    >>> g(3,4)
    7
    >>> (lambda x:x**2)(4)  #返回4的平方
    16
    

    lambda函数的使用方法:

    • 在lambda后面直接跟变量
    • 变量后面是冒号
    • 冒号后面是表达式,表达式计算结果就是本函数的返回值

    冒号后面是表达式,表达式计算结果就是本函数的返回值

    比如,要打印一个list,里面依次是某个数字的1次方,二次方,三次方,四次方。用lambda可以这样做:

    >>> lamb = [ lambda x:x,lambda x:x**2,lambda x:x**3,lambda x:x**4 ]
    >>> for i in lamb:
    ...     print i(3),
    ... 
    3 9 27 81
    

    map

    map()python的一个内置函数,它的基本样式是:
    map(func,seq)
    func是一个函数,seq是一个序列对象。在执行的时候,序列对象中的每个元素,按照从左到右的顺序,依次被取出来,并放入到func那个函数里面,并将func的返回值依次存到一个list中。如

    >>> items = [1,2,3,4,5]
    >>> squared = []
    >>> for i in items:
    ...     squared.append(i**2)
    ... 
    >>> squared
    [1, 4, 9, 16, 25]
    
    >>> def sqr(x): return x**2
    ... 
    >>> map(sqr,items)
    [1, 4, 9, 16, 25]
    
    >>> map(lambda x: x**2, items)
    [1, 4, 9, 16, 25]
    
    >>> [ x**2 for x in items ]     #这个我最喜欢了,一般情况下速度足够快,而且可读性强
    [1, 4, 9, 16, 25]
    
    

    要点:

    • iterable中的每个元素,依次应用function的方法(本质上就是一个for循环)
    • 将所有结果返回一个list
    • 如果参数很多,则对那些参数并行执行function

    继续下面两个例子:

    >>> lst1 = [1,2,3,4,5]
    >>> lst2 = [6,7,8,9,0]
    >>> map(lambda x,y: x+y, lst1,lst2)     #将两个列表中的对应项加起来,并返回一个结果列表
    [7, 9, 11, 13, 5]
    
    >>> lst1 = [1,2,3,4,5]
    >>> lst2 = [6,7,8,9,0]
    >>> lst3 = [7,8,9,2,1]
    >>> map(lambda x,y,z: x+y+z, lst1,lst2,lst3)
    [14, 17, 20, 15, 6]
    

    可以看到map函数的强大和简洁。如果使用for循环将会很繁琐

    reduce

    直接看例子:

    >>> reduce(lambda x,y: x+y,[1,2,3,4,5])
    15
    

    reduce函数的计算方式是将列表中的元素累加,((((1+2)+3)+4)+5)=15
    与map函数相比较就可以看出两者之间的区别。map是上下运算,reduce是横着逐个元素进行运算。

    reduce含可以接受第三个值作为初始值:例如

    >>> reduce(lambda x,y: x+y,[1,2,3,4,5],100)
    115
    

    上述列表中计算将以100为初始值执行累加计算,先计算 100+1

    filter

    filter的中文含义是“过滤器”,在python中,它就是起到了过滤器的作用.

    通过下面代码体会:

    >>> numbers = range(-5,5)
    >>> numbers
    [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
    
    >>> filter(lambda x: x>0, numbers) 
    [1, 2, 3, 4]
    
    >>> [x for x in numbers if x>0]     #与上面那句等效
    [1, 2, 3, 4]
    
    >>> filter(lambda x: x > 3, [1,2,3,4,5])  
    [4,5]
    

    拜读下filter的官方文档解释:

    filter(...)
        filter(function or None, sequence) -> list, tuple, or string
        
        Return those items of sequence for which function(item) is true.  If
        function is None, return the items that are true.  If sequence is a tuple
        or string, return the same type, else return a list.
    
  • 相关阅读:
    安装VisualStudio时失败,错误信息安装包失败或证书不在有效期内
    解决方案看起来是受源代码管理,但无法找到它的绑定信息。由于无法自动恢复这些缺少的信息,缺少绑定的项目将被视为不受源代码管理。
    ASP.NET+MVC+EntityFramework快速实现增删改查
    C#服务端Web Api
    Android DrawerLayout侧滑菜单
    Redis的简单使用
    windows10安装sqlmap与简单配置

    并发编程
    网络基础知识
  • 原文地址:https://www.cnblogs.com/pingqiang/p/7774980.html
Copyright © 2020-2023  润新知