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

    1.lamda匿名函数

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

    # 求n的平方
    #第一种方法:
    def func(n):
        return n * n
    print(func(4)) #16
    #第二种方法:
    a = lambda n: n * n
    print(a(4)) #16
    

    语法: 函数名=lamda参数:返回值                                  匿名函数不需要特殊声明,一句话就可以生成一个函数

    注意:1匿名函数可以使用多个参数,每个参数要用逗号隔开  

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

      3返回值和普通函数一样,可以是任意数据类型

    匿名函数并不是没有名字,通过__name__查询统一显示的是lamda,调用时跟普通函数一样

    应用:和函数组合使用

    2 sorrted排序函数

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

                           #  reverse:是否倒序   True:是,False:否

    lst=[1,5,3,7,6,9,2]
    lst1=sorted(lst)
    print(lst)# [1, 5, 3, 7, 6, 9, 2] 原列表不会改变
    print(lst1)#[1, 2, 3, 5, 6, 7, 9] 排序后的内容给了新列表
    dic={1:'A',2:'B',3:'C'}
    print(sorted(dic))# [1, 2, 3] 返回的是排序后的key值
    

     应用:1与函数组合使用;特别注意key值调用函数没有()

    # 对列表中的内容按照长度排序
    lst=['山本五十六','渡边','索尼爱立信','一本道','馋'] def func(el): return len(el) print(sorted(lst,key=func)) # ['馋', '渡边', '一本道', '山本五十六', '索尼爱立信']

      2与lamda组合使用

    按照年龄排序
    dic=[{'name':'zhao','age':18},{'name':'qian','age':8}, {'name':'sun','age':38},{'name':'li','age':28}] print(sorted(dic,key=lambda a:a['age'])) #打印结果为[{'name': 'qian', 'age': 8}, {'name': 'zhao', 'age': 18}, {'name': 'li', 'age': 28}, {'name': 'sun', 'age': 38}

      

    3 filter筛选函数

      语法:filter(function,iterable)  #function:用来筛选的函数,在filter中会自动把可迭代对象中的元素传递给function,然后根据function返回的True或者False来判断是否保留这项数据,True:保留   iter:可迭代对象

    筛选年龄大于20的
    lst=[{1:'名字','2':18},{1:'韩天宇','2':25},{1:'罗永浩','2':42}] print(filter(lambda a:a['2'],lst))# <filter object at 0x000001DC35DC8978> print(list(filter(lambda a:a['2']>20,lst)))#[{1: '名字', '2': 18}, {1: '韩天宇', '2': 25}, {1: '罗永浩', '2': 42}]

      

    4 map映射函数

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

    计算多个数的平方
    def func(n):
        return n**2
    mp=map(func,[2,3,4])
    print(mp)#<map object at 0x000001EDF0C989B0>
    print(list(mp))#[4, 9, 16]
    
    计算多个数平方(lamda方式)
    print(list(map(lambda a:a**2,[2,4,6])))#[4, 16, 36]
    

      

    # 计算两个列表中相同位置的数的和
    lst=[1,2,3,4,5]
    lst1=[3,6,98,45,78]
    print(list(map(lambda x,y:x+y,lst,lst1)))  #[4, 8, 101, 49, 83]

    5 递归:在函数中调用函数

    def func():
        print('哈哈')
        func()
    func()    #死循环 ,循环深度最大为1000
    

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

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

      

    6二分法

    二分查找:每次砍掉一般的数据,查找效率比较高,但是必须是有序数列.

     func(n, left, right):
        if left <= right: # 边界  左边界小于等于右边界
            mid = (left + right)//2 #中间值 地板除
            if n > lst[mid]:  #如果数据n大于中间值
                left = mid + 1# 左边界挪到中间+1的位置,相当于缩小一半位置
                return func(n, left, right) # 递归  递归的入口
            elif n < lst[mid]:#如果数据n小于中间值
                right = mid - 1#右边界挪到中间位置-1
                # 深坑. 函数的返回值返回给调用者
                return func(n, left, right)    # 递归
            elif n == lst[mid]: #如果n==中间值
                print("找到了")
                return mid
                # return  # 通过return返回. 终止递归
        else:
            print("没有这个数") # 递归的出口
            return -1 # 1, 索引+ 2, 什么都不返回, None
    # 找66, 左边界:0,  右边界是:len(lst) - 1
    ret = func(66, 0, len(lst) - 1)
    print(ret) # 不是None
    

      

  • 相关阅读:
    c# 虚拟路径转换为绝对路径
    Java基础——封装
    作为测试人,如何优雅的查看Log日志?
    学习整理
    记一次DataNode慢启动问题
    记一次DataNode慢启动问题
    记一次DataNode慢启动问题
    DataNode迁移方案
    C++学习笔记-模板
    C Primer Plus之指针
  • 原文地址:https://www.cnblogs.com/lingcai/p/9482905.html
Copyright © 2011-2022 走看看