美文网首页
Python学习(十六)--lambda表达式、map和redu

Python学习(十六)--lambda表达式、map和redu

作者: 白面葫芦娃92 | 来源:发表于2020-08-10 14:09 被阅读0次

    1.lambda表达式

    python把lambda称作匿名函数,C#则直接称作lambda表达式(lambda表达式的叫法更合适,因为:后边只能是一个表达式,不能放代码块,不能赋值,写for循环,if判断等等)

    def add1(x,y):
        return x+y
    
    add2 = lambda x,y: x+y
    
    print(add1(1,2))
    
    print(add2(1,2))
    ==>
    3
    3
    

    2.三元表达式

    其他语言:
    x > y ? x : y
    python:
    x if x > y else y

    x = 2
    y = 1
    r = x if x > y else y
    print(r)
    ==>
    2
    

    3.map

    (1)描述
    map() 会根据提供的函数对指定序列做映射。
    第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
    (2)map() 函数语法:

    map(function, iterable, ...)
    

    (3)参数
    function -- 函数
    iterable -- 一个或多个序列

    需求:列表list_x = [1,2,3,4,5,6,7,8],求列表每个元素的平方组成新的列表

    (1)方式1:

    list_x = [1,2,3,4,5,6,7,8]
    def square(x):
        return x*x
    
    r = []
    for x in list_x:
        r.append(square(x))
    print(r)
    ==>
    [1, 4, 9, 16, 25, 36, 49, 64]
    

    (2)方式2:

    list_x = [1,2,3,4,5,6,7,8]
    def square(x):
        return x*x
    # 使用map函数
    r = map(square,list_x)
    print(r)
    print(list(r))
    ==>
    <map object at 0x00000190424057B8>
    [1, 4, 9, 16, 25, 36, 49, 64]
    

    (3)方式3:

    # map结合lambda表达式
    list_x = [1,2,3,4,5,6,7,8]
    r = map(lambda x: x*x , list_x)
    print(list(r))
    ==>
    [1, 4, 9, 16, 25, 36, 49, 64]
    

    labmda表达式如果有两个参数传入,则后边也需要跟两个列表;
    lambda表达式只能使代码变简洁,无法提升性能

    list_x = [1,2,3,4,5,6,7,8]
    list_y = [1,2,3,4,5,6,7,8]
    r1 = map(lambda x,y: x*x+y, list_x,list_y)
    print(list(r1))
    ==>
    [2, 6, 12, 20, 30, 42, 56, 72]
    

    当两个参数列表的元素个数不一致时,能匹配上几个,就计算几个

    list_x1 = [1,2,3,4,5]
    list_y1 = [1,2,3,4,5,6,7,8]
    r2 = map(lambda x,y: x*x+y, list_x1,list_y1)
    print(list(r2))
    ==>
    [2, 6, 12, 20, 30]
    

    4.reduce

    (1)reduce() 函数语法:

    reduce(function, iterable[, initializer])
    

    (2)参数
    function -- 函数,有两个参数
    iterable -- 可迭代对象
    initializer -- 可选,初始参数
    (3)
    reduce下,lambda表达式必须要有2个参数;
    reduce在做一个连续的运算,连续调用lambda
    初始情况下,reduce会取列表的前两个元素,即1+2=3,接下来,上一次计算结果做为一个参数和下一个元素做运算(((((((1+2)+3)+4)+5)+6)+7)+8)

    from functools import reduce
    
    list_x = [1,2,3,4,5,6,7,8]
    r = reduce(lambda x,y: x+y,list_x)
    print(r)
    ==>
    36
    # 初始情况下,reduce会取列表的前两个元素,即1+2=3,
    # 接下来,上一次计算结果做为一个参数和下一个元素做运算(((((((1+2)+3)+4)+5)+6)+7)+8)
    

    第三个参数[, initializer]的用法:

    list_x2 = ['1','2','3','4','5','6','7','8']
    r = reduce(lambda x,y: x+y,list_x2,'aaa')
    print(r)
    ==>
    aaa12345678
    

    相关文章

      网友评论

          本文标题:Python学习(十六)--lambda表达式、map和redu

          本文链接:https://www.haomeiwen.com/subject/cuoddktx.html