zoukankan      html  css  js  c++  java
  • python day14内置函数二(lambda,sorted,filter,map,递归)

    一.lambda匿名函数

    为了解决一些简答的需求而设计的一句话函数.

     

    计算n的n次方

    def func(n):
        return n**n
    print(func(10))

    lambda

    f=lambda n:n**n
      print(f(10))

     

     lambda表示的是匿名函数,不需要用def来声明,一句话就可以声明出一个函数.

    语法:

      函数名=lambda 参数:返回值

    注意:

      1.函数的参数可以有多个.多个参数之间用逗号隔开.

      2.匿名函数不管有多复杂.只能写一行,且逻辑结束后直接返回数据.

      3.返回值和正常的函数一样,可以是任意数据类型.

     

    匿名函数并不是说一定没有名字.这里前面的变量就是一个函数名.说他是匿名原因是我们通过__name__查看的时候是没有名字的.统一都叫lambda.在调用的时候没用什么特别之处.像正常的函数调用即可.

     

    二.sorted()

    排序函数.

    语法: sorted(Iterable,key=None,reverse=Flase)

      Iterable:可迭代对象

      key:排序规则(排序函数),在sorted内部会将可迭代对象中的每一个元素传递给这个函数的参数.根据函数运算的结果进行排序.

      reverse:是否是倒叙. True:倒叙, False:正序

    lst=[1,5,3,4,6]
    lst2=sorted(lst)
    print(lst) #原列表不会改变 [1, 5, 3, 4, 6]
    print(lst2)#如果是字典,则返回排序后的key [1, 3, 4, 5, 6]
    dic ={1:'A',3:'c',2:'B'}
    print(sorted(dic)) #如果是字典,则返回排序后的key
    和函数组合使用
    lst=["麻花藤","冈本次郎","中央情报局","狐仙"]
    
    #计算字符串长度
    def func(s):
        return len(s)
    print(sorted(lst,key=func)) #['狐仙', '麻花藤', '冈本次郎', '中央情报局']
    和lambda组合使用
    #根据字符串长度进行排序
    lst=["麻花藤","冈本次郎","中央情报局","狐仙"]
    #计算字符串长度
    def func(s):
        return len(s)
    print(sorted(lst,key=lambda s:len(s))) #['狐仙', '麻花藤', '冈本次郎', '中央情报局']
    lst=[{"id":1,"name":"alex","age":18},
         {"id":2,"name":"wusir","age":16},
         {"id":3,"name":"taibai","age":17}]
    
    # 按照年龄对学生信息进行排序
    print(sorted(lst,key=lambda s:s["age"]))

    三.filter()
    筛选函数
    语法:filter(function,Iterable)
      function:用来筛选的函数.在fliter中会自动的把Iterable中的元素传递给function.然后根据function返回的True或者False来判断是否保留此项数据.
      Iterable:可迭代的对象
    lst=[1,2,3,4,5,6,7]
    ll=filter(lambda x: x%2==0,lst) #筛选所有的偶数
    print(ll)
    print(list(ll))
    
    lst2 = [{"id":1, "name":'alex', "age":18},
    {"id":2, "name":'wusir', "age":16},
    {"id":3, "name":'taibai', "age":17}]
    fl = filter(lambda e: e['age'] > 16, lst2) # 筛选年年龄⼤大于16的数据
    print(list(fl))
    
    
    
    四.map()
    映射函数
    语法:map(function,iterable) 可以对迭代对象中的每一个元素进行映射.分别取执行function.
    #计算列表中每个元素的平方,返回新列表.
    def func(e):
        return e*e
    
    mp =map(func,[1,2,3,4,5])
    print(mp)
    print(list(mp))  #[1, 4, 9, 16, 25] 
    改写成lambda
    print(list(map(lambda x:x*x,[1,2,3,4,5])))
    计算两个列表中相同位置的数据的和
    # 计算两个列列表相同位置的数据的和
    lst1 = [1, 2, 3, 4, 5]
    lst2 = [2, 4, 6, 8, 10]
    print(list(map(lambda x, y: x+y, lst1, lst2)))   #[3, 6, 9, 12, 15]
    
    
    
     
    五.递归
    在函数中调用函数本身,就是递归.
    def func():
      print("调用")
      func()
    func()
    
    
    

    递归的应用:
    我们可以使用递归来遍历各种树形结构, 比如我们的文件夹系统. 可以使用递归来遍历该
    文件夹中的所有文件.

    import os
    def func(path): #path: d:/a
        lst=os.listdir(path) #打开一个文件夹,获取到文件内的所有内容
        for el in lst:    #当前文件夹内的所有文件名(包括文件夹名字)
            #拼接文件的真实路径
            file_real_path=os.path.join(path,el)
        #判断这个路径是文件还是文件夹
            if os.path.isdir(file_real_path):
                print('文件夹:'+el)
                func(file_real_path)  #重新执行刚才的操作
            else:
                print(el) #不是文件夹,是文件
                            #递归的出口
    func("d:/a") #递归遍历d盘的a目录下所有文件夹和文件名
    
    
    结果:
    
    文件夹:b
    文件4.txt
    文件1.txt
    文件2.txt
    文件3.txt
     
  • 相关阅读:
    linux hosts文件详+mac主机名被莫名其妙修改
    WPF整理--动态绑定到Logical Resource
    WPF整理-使用逻辑资源
    WPF整理-自定义一个扩展标记(custom markup extension)
    WPF整理-XAML访问静态属性
    WPF整理-为控件添加自定义附加属性
    WPF整理-为User Control添加依赖属性
    使用MS Test进行单元测试
    WPF整理-XAML构建后台类对象
    毕业那点事儿--回顾在大学这7年
  • 原文地址:https://www.cnblogs.com/chcj/p/9910585.html
Copyright © 2011-2022 走看看