• 2018.10.10python学习第十六天part1


    匿名函数

    1.什么是匿名函数?(what)

    没有函数名的函数

    对比有名函数:区别是有函数名,可以被重复多少次使用

    特点:只能在定义的时候使用,且只能使用一次

    2.为何要用匿名函数?(why)

    因为匿名函数没有函数名,所有在定义完以后就会被python的垃圾回收机制回收,无法重复使用,所以,当某个功能只需要写一次,没有重复的必要的时候,可以用匿名函数的形式,这样可以节省内存空间。 3.如何使用匿名函数?(how)

    (lambda x,y:x+y)()

    #print(lambda x,y:x+y)得到的是一个函数的内存地址

    #x,y是匿名函数的参数,x+y是函数的功能,()是调用这个函数

    4.匿名函数和其他函数的配合使用(max min map reduce)

    max

    eg1.

    salaries={
       'egon':5000,
       'alex':10000,
       'aaa':20000
    }          
    ##取出工资最高的人的名字`

    #有名函数

    def func(k):
    return salarier[k]
    res=max(salaries,key=func)

    #匿名函数

    res=max(salaries,key=lambda name:salaries[name])
    print(res)

    max函数指定key后: 1.将可迭代的对象变成迭代器对象 2.迭代出来的值当作key后面的函数的参数传给key后面的函数 3.调用key=后面的函数,将返回值作为比较依据

    eg2. nums=[10,-22,11,8] ##比较他们平方的大小

    #有名函数

    def func(k):
    return k**2

    print(max(nums,key=func))

    #匿名函数

    res=max(nums,key=lambda k:k**2)
    print(res)

     

    min

    和max的作用原理类似

    map

    映射:相当于每个值执行一边map的规则,然后得到相同个数的值

    names=['aaa','bbb','ccc'] ##在每个人的名字后面加上’sb‘

    #方式1:

    new_names=[]
    for name in names:
    new_names.append(name+'sb')
    print(new_names)

    #方式二 :三元表达式

    naw_names=[name+'sb' for name in names]
    print(new_names)

    #方式三:map映射

    res=map(lambda x:x+'sb',names)
    print(res)

     

    reduce

    减少

    #方式一:手动实现

    res=0
    for i in range(1,101):
    res+=i
    print(res)

    #方式二:三元表达式

    res=sum(i for i in range(1,101))
    print(res)

    #方式三:reduce+匿名函数

    from functools import deduce
    res=reduce(lambda x,y:x+y,[i for i in range(1,101)])
    print(res)

    #reduce的工作原理:三个参数 #1.合并规则 #2.可迭代对象 #3.初始值(没有指定初始值是,默认是None)

    filter

    过滤

    #方式一

    new_names=[]
    names=['aaa_sb','bbb_sb','ccc_sb','ddd']
    for name in names:
    if name.endwith('sb'):
    new_names.append(name)
    print(new_names)

    #方式二:list生成式

    names=['aaa_sb','bbb_sb','ccc_sb','ddd']
    new_names=[name for name in names if name.endwith('sb')]
    print(new_names)

    #方式三:filter+匿名函数

    res=filter(lambda name:name.endwith('sb'),names)
    print(res)

     

  • 相关阅读:
    2022918 #29 愿灰飞烟灭 我的每个昨天
    2022917 #28 请允许我独自探访这场戏的结局
    2022911/12 #27 自弹 自唱 自赏 不如自封为王
    2022912 #26 新的开始
    EBS:导入弹性域关键字的值(FND_FLEX_LOADER_APIS.up_value_set_value)
    EBS:已知科目组合ID,查询科目组合值
    EBS:值集获取段限定词SQL
    EBS:资产期间状态查询
    Oracle Linux 7u2 启动错误 XFS_WANT_CORRUPTED_GOTO
    EBS:事物处理活动TRANSACTION_ACTION_ID
  • 原文地址:https://www.cnblogs.com/hello-yuanjing/p/9767029.html
Copyright © 2020-2023  润新知