• 01


    01:求结果

    def multipliers():
        return [lambda x:i*x for i in range(4)]
    print([m(2) for m in multipliers()])
    def a():
        return [lambda x:i*x for i in range(4)]
    b=a()   #返回个列表函数
    # b[2](1)
    
    print(b[1](1))
    # print(type(b),b)
    print([m(1) for m in a()])
    print([i*i for i in [1,2,3]])
    [3, 3, 3, 3]
    [1, 4, 9]
    
    
    '''
    def multipliers():
        return [lambda x:i*x for i in range(4)]
    print([m(2) for m in multipliers()])
    #解释:
      函数返回值为一个列表表达式,经过4次循环结果为包含四个lambda函数的列表,
    由于函数未被调用,循环中的i值未被写入函数,经过多次替代,循环结束后i值为3,
    故结果为:6,6,6,6
    
    
    
    func=lambda x:x+1
    print(func(1))
    #2
    print(func(2))
    #3
    
    #以上lambda等同于以下函数
    def func(x):
        return(x+1)
    '''

    拓展:

    def multipliers():
        return [lambda x:i*x for i in range(4)]
    print([m(2) for m in multipliers()])

    以上代码的输出是 [6, 6, 6, 6] (而不是 [0, 2, 4, 6])。 这个的原因是 Python 的闭包的后期绑定导致的 late binding,这意味着在闭包中的变量是在内部函数被调用的时候被查找。所以结果是,
    当任何 multipliers() 返回的函数被调用,在那时,i 的值是在它被调用时的周围作用域中查找,到那时,
    无论哪个返回的函数被调用,

    for 循环都已经完成了,i 最后的值是 3,因此,每个返回的函数 multiplies 的值都是 3。因此一个等于 2 的值被传递进以上代码,它们将返回一个值 6 (比如: 3 x 2)。 (顺便说下,正如在 The Hitchhiker’s Guide to Python 中指出的,这里有一点普遍的误解,是关于 lambda 表达式的一些东西。一个 lambda 表达式创建的函数不是特殊的
    ,和使用一个普通的 def 创建的函数展示的表现是一样的。) 。 通过修改产生期望的结果 0,2,4,6 最普遍的解决方案是创建一个闭包,通过使用默认参数立即绑定它的参数。例如: def multipliers(): return [lambda x, i=i : i * x for i in range(4)] 结果是:[0,2,4,6]

     二: 按照年龄对学⽣信息进⾏排序 使用lamda 函数 和sorted

    lst = [{"id":1, "name":'alex', "age":18},
    {"id":2, "name":'wusir', "age":16},
    {"id":3, "name":'taibai', "age":17}]
    按照年龄对学⽣信息进⾏排序 使用lamda 函数 和sorted
    
    # sorted 函数  sorted(可迭代对象,key,reverse=True)  reverse 不写的话默认是False
    
    rt=sorted(lst,key=lambda a:a["age"],reverse=False)
    print(rt)

    解释:
    sorted()
    排序函数.
    语法: sorted(Iterable, key=None, reverse=False)
    Iterable: 可迭代对象
    key: 排序规则(排序函数), sorted内部会将可迭代对象中的每⼀个元素传递给这个函
    数的参数. 根据函数运算的结果进⾏排序
    reverse: 是否是倒叙. True: 倒叙, False: 正序
    lst = [1,5,3,4,6]
    lst2 = sorted(lst)
    print(lst) # 原列表不会改变
    print(lst2) # 返回的新列表是经过排序的
    dic = {1:'A', 3:'C', 2:'B'}
    print(sorted(dic)) # 如果是字典. 则返回排序过后的key
    和函数组合使⽤
    # 根据字符串⻓度进⾏排序
    lst = ["麻花藤", "冈本次郎", "中央情报局", "狐仙"]
    # 计算字符串⻓度
    def func(s):
    return len(s)
    print(sorted(lst, key=func))
  • 相关阅读:
    【读书笔记】Expert Oracle Architecture (by Tom) (2)
    【读书笔记】Introducing ASP.NET
    【读书笔记】Expert Oracle Architecture (by Tom) (1)
    【原创】ASP.NET学习(3)
    【原创】XSL 学习(1)
    【原创】也谈“异步”响应
    【读书笔记】ASP.NET State Management
    基础算法之枚举
    基础算法之排序查找算法
    开放内网(转)
  • 原文地址:https://www.cnblogs.com/one-tom/p/11389868.html
Copyright © 2020-2023  润新知