zoukankan      html  css  js  c++  java
  • Python-匿名函数

    先来一个有名函数

    def f1(n):
        return n**2
    
    f1(3)
    print(f1)
    print(f1(3))

    匿名函数自带retrun,例如

    lambda n:n**2
    print(lambda n:n**2)
    
    <function <lambda> at 0x100562e18>

    小总结,

    1 匿名函数即没有绑定名字的函数,没有绑定名字,意味着只能用一次就会被回收
    2 所以说匿名函数的应用场景就是:某个功能只用一次就结束了

    这里提前介绍下内部函数

    salaries={
        'egon':3000,
        'alex':100000000,
        'wupeiqi':10000,
        'yuanhao':2000
    }
    print(max(salaries)) #默认比较的是key
    print(max(salaries.values()))

    max和for都遵循迭代器协议。

    这里提前介绍下拉链函数

    l1=[1,2,3]
    s1='hello'
    
    res=zip(l1,s1)
    print(res)     #后面可接__iter__和__next__,因此也是迭代器
    print(list(res))
    
    <zip object at 0x101363d08>
    [(1, 'h'), (2, 'e'), (3, 'l')]

    继续上一个例子(序列类型(带索引)比大小,从第一个值开始比较,比出来即可得出结果):

    折中方案:

    res=zip(salaries.values(),salaries.keys())
    print(max(res)[1])
    
    把values放在前面,取第二个值(人名)

    接下来,max与lambda的结合:

    max比较key后面的功能(函数),此处是比较f1的执行结果

    salaries={
        'egon':3000,
        'alex':100000000,
        'wupeiqi':10000,
        'yuanhao':2000
    }
    def f1(k):
        return salaries[k]
    
    print(max(salaries,key=lambda k:salaries[k]))
    #等同于:
    print(max(salaries,key=f1)

    引申如下:

    print(min(salaries,key=lambda k:salaries[k]))
    
    print(sorted(salaries,key=lambda k:salaries[k]))
    print(sorted(salaries,key=lambda k:salaries[k],reverse=True))
    
    按工资排序!

    接下来再介绍几个内置函数:map、reduce、filter

    l=['alex','wupeiqi','yuanhao','huanghongwei']
    print(map(lambda x:x+'_SB',l))  #迭代对象(l)和max相反,放在函数参数后面
    print(list(map(lambda x:x+'_SB',l)))

    可用于京东购物,推送。
    from functools import reduce
    
    print(reduce(lambda x,y:x+y,range(1,101)))    #1+到100,所以这里是(1,101)
    print(reduce(lambda x,y:x+y,range(1,101),100))    #后面的100,是以这个数作为初始值,得到的结果为5150
    # 此无参函数需要两个参数
    # reduce内部机制,先判断有没有初始值,如果没有就先for循环取一个值(1),赋值给初始值,接下来再循环,取值(2);
    # 这一次3被计算出来了,下一次计算用这个3作为初始值,再for循环取值(3)
    l=['alex_SB','wupeiqi_SB','yuuanhao_SB','hhw','egon']
    
    res=filter(lambda name:name.endswith('SB'),l)
    # 循环后面的l,传给前面的函数,"执行后得到一个bool值",filter把这个函数的结果为trun的情况下那一个迭代的值当成最后的结果,保存在这个结果。
    print(list(res))

    作者:大雄猫
    出处:http://www.cnblogs.com/guoxiangqian/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面 明显位M给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    mysql远程连接拒绝连接错误
    在C#中mongohelper的初始化
    利用C# 驱动删除mongo中 list中的 某一项
    js如何获得url中的参数
    设置p标签的内容超出部分以省略号替换不起作用
    利用C#序列化和反序列化json
    简单操作excel类
    C# 如何取得汉字的字符长度
    js的一些基本操作
    ThinkPHP5 打开多语言支持
  • 原文地址:https://www.cnblogs.com/guoxiangqian/p/7685361.html
Copyright © 2011-2022 走看看