美文网首页
Python编程高阶函数应用

Python编程高阶函数应用

作者: 学人工智能的菜菜 | 来源:发表于2020-04-08 18:33 被阅读0次

    匿名函数

    当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
    lambda 参数列表:函数体
    匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

    #比如要实现两个数x,y相加,普通函数的实现
    def add(x,y):
        return x+y
    add(3,4)
    out:7
    #用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:
    add_lambda = lambda x,y:x+y 
    add_lambda(3,4)
    out:7
    

    三元运算法

    #Python的三元运算符跟其他语言不太一样,Python的实现如下:
    condition = True
    print(1 if condition else 2)
    out:1
    
    condition = False
    print(1 if condition else 2)
    out:2
    

    map函数的应用

    map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
    第二个参数是*iterables(可迭代对象,是一个list),所以可以接收多个list对象,供给函数使用
    举例说明,map就是输入多少个,返回也是多少个数据,只是中间经过函数的一些算法和数据结构的操作,内容变化了,大概的架构如下图所示:


    image.png
    list1 = [1,2,3,4,5]
    r = map(lambda x:x*x,list1)
    print(r)
    #map转换出来的是map对象,需要进行强转list
    print(list(r))
    out:[1, 4, 9, 16, 25]
    r = map(lambda x,y:x*x+y*y,list1,list1)
    print(list(r))
    out:[2, 8, 18, 32, 50]
    

    filter过滤器

    和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

    list2 = [' ','','35', 'aaa','hahh',None]
    r = filter(lambda x:x if x and len(x.strip())>0 else 0,list2)
    print(list(r))
    out:['35', 'aaa', 'hahh']
    
    #也可以这样实现
    list2 = [' ','','35', 'aaa','hahh',None]
    def is_not_empty(x):
        return x and len(x.strip())>0
    f = filter(is_not_empty,list2)
    list(f)
    out:['35', 'aaa', 'hahh']
    

    reduce函数应用

    reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
    reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
    其大概架构如下图所示:


    image.png

    代码如何实现呢:

    from _functools import reduce
    list1 = [1,2,3,4,5]
    r = reduce(lambda x,y:x+y,list1)
    print(r)
    out:15
    
    #也可以有初始值,下面的初始值为10,所以最后计算的值是25
    from _functools import reduce
    list1 = [1,2,3,4,5]
    r = reduce(lambda x,y:x+y,list1,10)
    print(r)
    out:25
    

    Python的三大推导式

    根据已有的列表推导出新的列表.

    #其实map也可以实现的,但是根据上面map的结果可知,打印出来的结果是map格式的,需要进行强转,所以不方便
    list1 = [1,2,3,4,5,6]
    f = map(lambda x:x+x,list1)
    print(list(f))
    
    list2 = [i+i for i in list1]
    print(list2)
    #所以列表解析式更方便啦
    
    #有选择性的筛选
    list3 = [i+i for i in list1 if i>3]
    print(list3)
    out:
    [2, 4, 6, 8, 10, 12]
    [2, 4, 6, 8, 10, 12]
    [8, 10, 12]
    

    集合推导式

    list2 = {i+i for i in list1}
    print(list2)
    #所以列表解析式更方便啦
    
    #有选择性的筛选
    list3 = {i+i for i in list1 if i>3}
    list3
    out:
    {2, 4, 6, 8, 10, 12}
    {8, 10, 12}
    

    字典推导式

    #字典推导式个前面两个(集合和列表推导式有点不太一样,该获取数据需要.items())
    s = {
        'name':'zhangsan',
        'age':25,
    }
    #拿出所有的key,并变成列表
    a_key = [key for key,value in s.items()]
    print(a_key)
    #key 和 value颠倒
    a1 = {value:key for key,value in s.items()}
    print(a1)
    #只拿出符合条件的值
    a2 = {value:key for key,value in s.items() if key=="name" }
    print(a2)
    out:
    ['name', 'age']
    {'zhangsan': 'name', 25: 'age'}
    {'zhangsan': 'name'}
    

    相关文章

      网友评论

          本文标题:Python编程高阶函数应用

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