zoukankan      html  css  js  c++  java
  • 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)

     

  • 相关阅读:
    java.security.ProviderException: java.security.KeyException
    DES ECB 模式 JAVA PHP C# 实现 加密 解密 兼容
    mysql timestamp类型字段的CURRENT_TIMESTAMP与ON UPDATE CURRENT_TIMESTAMP属性
    阿里云composer 镜像
    封装redis操作 php版本
    金钱数友好显示 php版本
    php代码规范->如何写出规范且易于理解的项目代码-ZX版
    hibernate 注解大全
    国家省市区县乡镇三级,五级地址数据
    java基础 数据类型转换
  • 原文地址:https://www.cnblogs.com/hello-yuanjing/p/9767029.html
Copyright © 2011-2022 走看看