zoukankan      html  css  js  c++  java
  • python匿名函数的使用方法详解

    一、lambda关键字的使用方法

    func=lambda x:x+1
    print(func(1))
    #2
    print(func(2))
    #3
    
    #以上lambda等同于以下函数
    def func(x):
       return(x+1) 

    注释:可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体。在这里lambda简化了函数定义的书写形式。是代码更为简洁,但是使用函数的定义方式更为直观,易理解。

    二、Python中,也有几个定义好的全局函数方便使用的,filter, map, reduce。

    filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)。
    
    filter(function or None, sequence) -> list, tuple, or string:入参为函数和列表/元组/字符串,返回值为item列表/元组/字符串。
    
    map(function, sequence) :对sequence中的item依次执行function(item),将执行结果function(item)组成一个List返回。
    
    map(function, sequence[, sequence, ...]) -> list:入参是为函数和列表/元组/字符串,返回值为function(item)列表。
    
    reduce(function, sequence, starting_value):对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用。function接收的参数个数只能为2,先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给function,然后只返回一个结果。
    
    reduce(function, sequence[, initial]) -> value:入参是为函数和列表/元组/字符串和初始值,返回值为数值。
     from functools import reduce 
     foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
     
     print (list(filter(lambda x: x % 3 == 0, foo)))
     #[18, 9, 24, 12, 27]
     
     print (list(map(lambda x: x * 2 + 10, foo)))
     #[14, 46, 28, 54, 44, 58, 26, 34, 64]
     print (reduce(lambda x, y: x + y, foo))
    #139
    #1.lambda用法,冒号之前的是入参,冒号之后的是表达式,返回的值,最简单的函数
    print [(lambda x:x*x)(x)for x in range(11)]
    #结果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    print (lambda x:x*x)(3)
    #结果:9
    g=lambda x:x*x
    print g(4)
    #结果:16
    
    #2.filter用法:返回执行结果为TRUE的入参(入参是列表字符元组)
    print filter(lambda x:x*x-4,range(10))
    #结果:[0, 1, 3, 4, 5, 6, 7, 8, 9]
    
    #3.map的用法:对列表入参依次执行函数。入参为列表,有多少个列表,就应该有多少个入参。
    print map(lambda x:x*x-4,range(10))
    #结果:[-4, -3, 0, 5, 12, 21, 32, 45, 60, 77]
    print map(lambda x,y:x*y-4,range(3),[8,9,10])
    #结果:[-4, 5, 16]
    
    #4.reduce用法:先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给fuction,最终返回一个结果值
    #接收的入参个数只能为2
    print reduce(lambda x,y:x*y-4,range(4))
    #结果:-40
    #计算0到100的和
    print reduce(lambda x,y:x+y, range(101))
    #结果:5050
    print reduce(lambda x,y:x+y, range(101),100)
    #结果:5150
  • 相关阅读:
    ACM ICPC 2008–2009 NEERC MSC A, B, C, G, L
    POJ 1088 滑雪 DP
    UVA 11584 最短回文串划分 DP
    POJ 2531 Network Saboteur DFS+剪枝
    UVa 10739 String to Palindrome 字符串dp
    UVa 11151 Longest Palindrome 字符串dp
    UVa 10154 Weights and Measures dp 降维
    UVa 10271 Chopsticks dp
    UVa 10617 Again Palindrome 字符串dp
    UVa 10651 Pebble Solitaire 状态压缩 dp
  • 原文地址:https://www.cnblogs.com/NumerOne/p/11646062.html
Copyright © 2011-2022 走看看