zoukankan      html  css  js  c++  java
  • 内置函数二

    一 . lambda匿名函数

      lambda表示的是匿名函数.不需要用def来声明

      语法 : 

        函数名 = lambda 参数 : 返回值

      注意:

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

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

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

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

    二 . sorted()

      排序函数

      语法 : sorted(iterable,key=None,reverse=False)

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

        reverse : 是否是倒序.Ture : 倒序 , 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

      和函数 , lambda组合使用

    # 根据字符串长度进行排序
    lst = ["麻花藤","冈本次郎","中央情报局","狐仙"]
    
    # 用函数计算字符串长度
    def func(s):
        return len(s)
    
    print(sorted(lst,key = func))
    
    #用lambda计算字符串长度
    print(sorted(lst , key = lambda s: len(s)))

    三 . filter()

      筛选函数

      语法 : filter(function , iterable)

        function : 用来筛选的函数,在filter中会自动的把iterabler中的元素传递给functian,然后根据function返回的Ture或False来判断是否保留此项数据

        iterable : 可迭代对象

    lst = [1,2,3,4,5,6,7]
    ll = filter(lambda x: x%2 == 0,lst)      # 筛选所有的偶数
    
    print(ll)
    print(list(ll))

    四 . map()

      映射函数

      语法 : map(function , iterable) 可以读可迭代对象中的每一个元素进行映射,分别取执行function

    def func():
        return e*e
    
    mp = map(func,[1,2,3,4,5])
    print(mp)
    print(lst(mp))
    
    
    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)))

    五 . 递归

      在函数中调用函数本身,就是递归

    def func():
        print("你好")
        func()
    func()

      在python中递归的深度最大到1000

      递归的应用 :

        我们可以使用递归来遍历各种树状型结构,比如 : 文件夹中所有的文件

    import os
    
    def func(filepath , n):
        files = os.listdir(filepath)    # 获取到当前文件夹中的所有的文件
        for file in files:      #遍历文件夹中的文件,如果获取到的只是本层文件名
            file_d = os.path.join(filepath,file) #加入文件夹,获取到文件夹+文件
            if os.path.isdir(file_d)   # 如果该路径下的文件时文件夹
                print("	"*n , file)
                read(file_d , n+1)      #继续进行相同的操作
            else:
                print("	"*n , file)    # 递归出口 ,最终在这里隐含着return
    
    # 递归遍历目录下所有文件
    func("d/xuexi/, 0)

    六 . 二分法查找

      二分法查找,每次能够出掉一半的数据.查找的效率非常高.但是局限性比较大,必须是有序序列才可以使用二分法查找

      要求 : 查找的序列必须是有序序列

    lst = [22,33,44,55,66,77,88,99,101,238,345,456,567,678,789]
    n = 88
    left = 0
    right =len(lst) - 1
    count = 1
    while left <= right:
        mid = (left +right)//2
        if n < lst[mid]:
            right = mid - 1
        elif n > lst[mid]:
            left = mid + 1
        else:
            print(count)
            print(mid)
            break
        count += 1
    else:
        print("不存在")
    
    # 普通递归二分法
    def func(n , left , right):
        if left <= right:
        mid = (left + right) // 2
            if n < lst[mid]:
                right = mid - 1
            elif n > lst[mid]:
                left = mid + 1
            else:
                return mid
            return func(n left ,right)   # 这个return必须要加,否则接受到的永远是None
    
        else:
            return -1
    
    print(func(88 , 0 , len(lst) - 1))
    
    
    #另类二分法,很难计算位置
    def func(lst , n):
        
        left = 0
        right = len(lst) - 1
        if left > right:
            print("不在这里")
        mid = (left + right) // 2    
        if n < lst[mid]:        
            return func(ls[:mid], n)    
        elif n > lst[mid]:        
            return func(ls[mid+1:], n)    
        else:        
            print("在这里") 
    func(lst, 567)
  • 相关阅读:
    project3 blockchain
    RESTful Web服务与“大”Web服务: 做出正确的建筑决策
    project2
    LAB4
    云计算的描述性文献综述与分类研究
    SQL常见面试题(学生表_课程表_成绩表_教师表)
    等价类划分经典实例-三角形测试用例设计
    搜索框功能测试分析
    B/S结构-登录页面-测试用例设计
    软件测试面试--常用基本控件测试用例
  • 原文地址:https://www.cnblogs.com/xiangweilai/p/9482081.html
Copyright © 2011-2022 走看看