zoukankan      html  css  js  c++  java
  • 函数编程(二)

    在python中有许多函数具有函数式编程的特征。

    lambda函数可以很好地和使用这些函数的应用程序结合起来,因为它们都带了一个可执行的函数对象。

    lambda表达式提供了迅速创造这些函数的机制。

    一、filter

    filter在给定一个对象的序列和一个“过滤”函数的基础上,每个序列元素都通过这个过滤器进行筛选,保留函数返回为真的对象。

    filter函数为已知的序列的每个元素调用给定布尔函数。每个filter返回的非零(true)值元素添加到一个列表中。

    返回的对象是一个从原始队列中“过滤后”的队列。

    注意:filter()在python三种改了,返回的是一个可迭代的对象。

    #!/usr/bin/env python
    from random import randint   #调用函数
    
    def odd(n):
        return n % 2   #定义一个整数的函数
    
    allNums = []
    for eachNum in range(9):
        allNums.append(randint (1,99))  #随机生成9个值
    allFilter = []
    
    for eachone in filter(odd,allNums):
        allFilter.append(eachone)  #用odd将allNums过滤
    
    print(allFilter)
    
    #虽然使用filter有些多余,但是重要的是思想。

    执行结果:

    #随机返回一些奇数值
    [root@7 script]# python 11-7-21.py
    [9, 25, 69]
    [root@7 script]# python 11-7-21.py
    [55, 83, 41]
    [root@7 script]# python 11-7-21.py
    [67, 9, 35, 85, 11]

    第一次改写:odd()能够用一个lambda表达式替换。

    #!/usr/bin/env python
    from random import randint
    allNums = []
    for eachNum in range(9):
        allNums.append(randint(1,99))
    
    allones = []
    for eachone in filter(lambda n:n%2,allNums): #使用匿名函数直接生成,而且也没有保留函数的必要。
        allones.append(eachone)
    
    print(allones)

    第二次改写:一个列表就可以替代filter函数

    #!/usr/bin/env python
    from random import randint
    allNums = []
    for eachNum in range(9):
        allNums.append(randint(1,99))
    
    eachones =[]
    for eachone in [n for n in allNums if n%2]:  
        eachones.append(eachone)
    
    print(eachones)

    第三次改写:

    #!/usr/bin/env python
    from random import randint as ri
    eachones = []
    for eachone in [n for n in [ri(1,99) for i in range(9)] if n%2]:
        eachones.append(eachone)    #函数都可以不要了
    
    print(eachones)

    二、map()

    map()和filter()有点类似,都可以通过函数来梳理数据。

    在最简单的形式中,map()带一个函数和队列,将函数作用在序列的每个元素上,然后创建由每次函数应用组成的返回值列表。

    >>> for i in map((lambda x:x+2),[0,1,2,3,4,5]):
    ...     print(i)
    ... 
    2
    3
    4
    5
    6
    7
    >>> for i in map(lambda x,y:x+y,[1,3,5],[2,4,6]):
    ...     print(i)
    ... 
    3
    7
    11
    >>> for i in map(lambda x,y:(x+y,x-y),[1,3,5],[2,4,6]):
    ...     print(i)
    ... 
    (3, -1)
    (7, -1)
    (11, -1)
  • 相关阅读:
    基金进阶
    gpgj-19.高级课总结
    (10)大类资产配置一升级版股债平衡
    13.高速公路行业
    16.投资法总结以及类集团公司介绍
    08.零售类公司分析•上
    在Ubuntu 12.04系统中安装配置OpenCV 2.4.3的方法
    一台电脑上含有多个ubuntu系统的卸载方法
    Linux命令每日一个
    Java UDP实现聊天功能代码
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/7764637.html
Copyright © 2011-2022 走看看