zoukankan      html  css  js  c++  java
  • 匿名函数与内置函数

    语法:
        lambda 参数: 返回值
        lambda :
    
    例如:lambda x,n:x**n 
    f = lambda x,n:x**n
    f(2,3)
    >>>8
    
    注意:
    匿名函数需要一次性使用。
    匿名函数单独使用毫无意义,它必须配合 “内置函数” 一起使用的才有意义。
    
    # 有名函数
    def func():   #func --->内存地址
        return 1
    print(func())  # func函数对象 + ()   即调用
    
    # 匿名函数:
    # 匿名(), return 已经自动添加了
    # lambda 匿名(): return 1
    func = lambda : 1
    print(func())   # 1
    
    func = lambda : 1
    print()

    二、内置函数
    内置函数:python内部提供的自带的内置方法
    如:range,print,len,max,min,sorted,map,filter

    max:求最大值 max(可迭代对象)

    max内部会将可迭代对象中的每一个值取出,并且进行判断
    list1 = [1,2,3,4,5]
    print(max(list1))  
    >>>5
    
    # 需求: 获取dict1中薪资最大的人的 名字
    dict1 = {
        'tank': 1000,
        'egon': 500,
        'sean': 200,
        'jason': 100
    }
    print(max(dict1, key=lambda x: dict1[x]))
    >>>tank

    sorted: 默认升序(从小到大) reverse:反转 reverse默认是False

    list1 = [10, 2, 3, 4, 5]
    print(sorted(list1))
    print(sorted(list1, reverse=True))     # reverse=True--> 降序
    
    
    dict1 = {
        'tank': 100,
        'egon': 500,
        'sean': 200,
        'jason': 50
    }
    # new_list = ['egon', 'sean', 'tank', 'jason']
    new_list = sorted(dict1, key=lambda x: dict1[x], reverse=True)      #联想到for对字典取值都是去的键值
    print(new_list)

    [2, 3, 4, 5, 10]
    [10, 5, 4, 3, 2]
    ['egon', 'sean', 'tank', 'jason]

    map映射

    语法:map(函数地址, 可迭代对象) ---> map对象
         map会将可迭代对象中的每一个值遍历取出,并且按照指定的规则映射到一个map对象中,
         可以再将map对象转换成列表/元组。
         注意: 只能转一次。
    
    如:
    name_list = ['egon', 'jason', 'sean',  'tank']
    map_1 = (map(lambda x : x + '喜欢吃生蚝' if x == 'tank' else x + '_DJB',name_list))
    print(map_1)   # map_1 是一个map对象  即<map object at 0x00000177C926FB48>
    print(list(map_1))   #转成列表  map_1-->生成器--->用完后,就不能再取了
    #print(tuple(list(map_1)))   #是一个空元组


    Map
    Map会将⼀个函数映射到⼀个输⼊列表的所有元素上。 这是它的规范:
    规范
    map(function_to_apply, list_of_inputs)
    ⼤多数时候, 我们要把列表中所有元素⼀个个地传递给⼀个函数, 并收集输出。 ⽐⽅说:
    items = [1, 2, 3, 4, 5]
    squared = []
    for i in items:
    squared.append(i**2)
    Map可以让我们⽤⼀种简单⽽漂亮得多的⽅式来实现。 就是这样:
    items = [1, 2, 3, 4, 5]
    squared = list(map(lambda x: x**2, items))
    ⼤多数时候, 我们使⽤匿名函数(lambdas)来配合map, 所以我在上⾯也是这么做的。 不仅
    ⽤于⼀列表的输⼊, 我们甚⾄可以⽤于⼀列表的函数!
    def multiply(x):
    return (x*x)
    def add(x):
    return (x+x)
    funcs = [multiply, add]
    for i in range(5):
    value = map(lambda x: x(i), funcs)
    print(list(value))
    # 译者注: 上⾯print时, 加了list转换, 是为了python2/3的兼容性
    # 在python2中map直接返回列表, 但在python3中返回迭代器
    # 因此为了兼容python3, 需要list转换⼀下
    # Output:
    # [0, 0]
    # [1, 2]
    # [4, 4]
    # [9, 6]
    # [16, 8]
    View Code

    reduce合并

    from functools import reduce
    
        -每次从可迭代对象中获取两个值进行合并,并且可以设置初始值    
        -语法:reduce(lambda x, y: x + y, range(1, 101), 0)
        
    # 需求: 求1——100的和
    res = reduce(lambda x, y: x + y, range(1, 101), 1000)
    print(res)  # 6050

    filter过滤

    语法:filter(函数地址,可迭代对象)
          filter_obj = filter(lambda x: x, name_list)
          filter会将可迭代对象中的值遍历取出,然后通过判断,把条件成立 “过滤获取”出来的值添加到 filter对象中
        
    name_list = ['egon_dsb', 'jason_dsb','sean_dsb', 'tank']    
    filter_obj = filter(lambda name: name.endswith('_dsb'), name_list)  #filter_obj是一个filter对象
    print(filter_obj)   #<filter object at 0x0000016CC5A5ED48>
    print(list(filter_obj))  #转成列表
    # print(tuple(filter_obj))  #['egon_dsb', 'jason_dsb', 'sean_dsb']

     zip

    zip(*Iterables),zip接受多个可迭代对象
    
    列表并⾏排序
    data = zip(list1, list2)
    data.sort()
    list1, list2 = map(lambda t: list(t), zip(*data))
    
    
    解压列表
    a=[1,2,3,4]
    b=[7,8,9,0]
    zipped=zip[a,b]
    list[zipped]
    a2,b2=zip(*zip(a,b))           
    print(a==list(a2) and b==list(b2))
    
    注:zip(a,b)是一个可迭代对象
    *迭代器结果为(1,7)(2,8)(3,9)(4,0)  #打印时没有逗号,其实本质上是一样的
    zip(*zip(a,b))等价于zip((1,7),(2,8),(3,9),(4,0))

    xxx(*Iterables)的接受参数理解:

    接受多个可迭代对象,

    迭代器打散后为可以是多个普通元素,也可以是多个可迭代对象

  • 相关阅读:
    最好的委托与事件详解一(转自张子阳博客)
    事务处理两种方式(转自一壶茶水)
    条目列表点击效果
    html可变大小字体
    udp群聊
    vbs隐藏运行bat之木马合体
    淘宝客网站的链接跳转形式
    工作之外八小时,用辛苦换幸福
    怕吃苦,吃苦一辈子
    外链建设的六个方法
  • 原文地址:https://www.cnblogs.com/wddxx/p/13667684.html
Copyright © 2011-2022 走看看