• python 函数式编程工具


    1.Lambda函数

    Python使用lambda支持在运行时创建匿名函数(没有绑定名称的函数)。

    >>> g=lambda x:x+2
    >>> 
    >>> print(g(8))
    10
    

    lambda函数并没有使用return语句---经常包含一个被返回的表达式。可以把lambda函数定义放置在任何需要函数的地方, 也不需要将其赋值给一个变量。

    >>> def make_incrementor(n): return lambda x:x+n
    
    >>> f=make_incrementor(2)
    >>> g=make_incrementor(6)
    >>> print(f)
    <function make_incrementor.<locals>.<lambda> at 0x02A5DC00>
    >>> print(f(42),g(23))
    44 29
    >>> print (make_incrementor(22)(12))
    34
    >>> 
    

    2.filter(),map(),reduce()函数 

    函数编程中lambda经常和一些典型的函数一起使用,例如:filter()map() 和 reduce()

    filter()

    filter(function, sequence) 返回一个 sequence(序列),包括了给定序列中所有调用 function(item) 后返回值为 true 的元素(如果可能的话,会返回相同的类型),并且,在python 3 中,map(),filter() 返回值已经不再是list,而是iterator,想要使用,只用将iterator 转换成list即可,list(map())

    >>> def f(x):return x%3==0 or x%5==0
    
    >>> filter(f,range(2,25))
    <filter object at 0x02A5E9F0>
    
    >>> def f(x):return x%3==0 or x%5==0
    >>> list(filter(f,range(2,25)))
    [3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24]
    

    map()

    map(function, sequence) 为每一个元素依次调用 function(item) 并将返回值组成一个链表list返回。可以传入多个序列,函数也必须要有对应数量的参数

    >>> def cube(x):
    	return x*x*x
    
    >>> map(cube,range(1,11))
    <map object at 0x02A5E9F0>
    >>> list(map(cube,range(1,11)))
    [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
    

    reduce()

    reduce(function, sequence) 返回一个单值,它是这样构造的:首先以序列的前两个元素调用函数 function,再以返回值和第三个参数调用,依次执行下去。并且,在python 3中,reduce已经取消,如果使用,可以用fuctools.reduce来调用,但是要先导入fuctools

    >>> import functools
    >>> def add(x,y): return x+y
    
    >>> functools.reduce(add,range(1,11))
    55
    

    例:利用lambda函数和filter求质数

    >>> nums = range(2,50)
    >>> for i in range(2,8):
    	nums=list(filter(lambda x:x==i or x%i ,nums))
    
    	
    >>> print(nums)
    [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
    >>> 
    

      

    
    
  • 相关阅读:
    .net中AjaxPro的简单使用
    关于 Activity 中 startActivityForResult 和 onActivityResult
    产品经理值得读的12本书
    存储过程中使用事务与try catch
    扁平化数据解构转化成树形结构
    JavaScript编程精解
    泛型
    OATS:Orthogonal Array Testing Strategy
    等价类划分
    C# homework
  • 原文地址:https://www.cnblogs.com/lucyliu/p/5776374.html
Copyright © 2020-2023  润新知