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

    一.lamda匿名函数

    定义:为了解决一些简单的需求而设计的函数.

    语法:函数名=lambda 参数 : 返回值

    1,函数的声明
    def func(n):
        '''
        此函数接收一个参数n
        计算n的n次方
        :param n:  传递进来的n
        :return:  n的n次方
        shijian
        zuozhe
        '''
        return n**n
    r = func(3) # 函数的调用
    print(r)
    
    #print(func.__name__) #查看函数名
    #print(func.__doc__) #查看注释文档
    例一:
    a = lambda n: n**n # 匿名函数, 一般不会用来做复杂的操作
    r=a
    print(r)
    例二
    # 写一个lambda 计算字符串长度并返回 # len()
    a = lambda s: len(s)
    例三:
    # 写一个lambda 给函数传递两个参数, a, b 计算a+b的结果
    a = lambda m, n: m + n
    

      

    注意:
    1. 函数的参数有多个,多个参数之间用逗号隔开
    2. 匿名函数不管有多复杂,只能写一行,且逻辑结束后直接返回数据
    3.返回值和正常的函数一样,可以是任意数据类型

    二:排序函数sorted()

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

    Iterable: 可迭代对象
    key: 排序规则(排序函数), 在sorted内部会将可迭代对象中的每⼀个元素传递给这个函
    数的参数. 根据函数运算的结果进⾏排序
    reverse: 是否是倒叙. True: 倒叙, False: 正序

    例一
    list=[1,5,3,4,6]
    lst=sorted(list)
    print(lst)
    print(list)
    例二
    dic={1:'A',3:'c',2:'b'}
    print(sorted(dic))
    例三和函数一起使用
    lst=["麻花藤","冈本次郎","中央情报局","狐仙"]
    def func(s):
        return len(s)
    print(sorted(lst,key=func))
    例四 和函数组合使用
    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 e:e["age"]))

    三fitter()筛选函数

    语法: filter(function. Iterable)

    function: ⽤来筛选的函数. 在filter中会⾃动的把iterable中的元素传递给function. 然后
    根据function返回的True或者False来判断是否保留此项数据
    Iterable: 可迭代对象

    例一
    lst=[1,2,3,4,5,6,7,8,9,10]
    ll=filter(lambda  x: x%2==0,lst)
    print(ll)
    print(list(ll))
    例二
    lst=[{"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,lst)
    print(list(f1))
    例三
    c=lambda a,b: a+b
    r=c(3,4)
    print(r)
    例四
    lst=["麻花藤","冈本次郎","中央情报局","狐仙"]
    ll=lambda s: len(s)
    r=ll
    print(r)
    例五
    lst=["精卫填海","放羊的星星","年轮","灵魂摆渡","蜗居","第八号当铺","惊魂"]
    f=filter(lambda s: len(s)>2,lst)
    print(f)
    print("__iter__" in dir(f))
    for i in f:
         print(i)
    例六
    lst=[{"id":1,"name":'alex',"age":18},
         {"id":2,"name":"wusir","age":16},
         {"id":3,"name":"taibai","age":34},
         {"id": 3, "name": "太白", "age": 49},
         {"id": 3, "name": "太黑", "age": 26},
         {"id": 3, "name": "骚逼", "age": 17}
         ]
    f2=filter(lambda e:e["age"]>=30,lst)
    print(f2)
    print("__iter__" in dir(f2))
    for j in f2:
         print(j)

    四map函数(映射函数)

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

    例一:计算列表中每个元素的平方返回新列表
    lst=[2,3,4,5,6,7]
    m=map(lambda s:s**2,lst)
    print("__iter__" in dir(m))
    for i in m:
         print(i)
    
    n=filter(lambda x:x**2,lst)
    for j in n:
         print(j)
    例二:查找是否在列表里面
    用户:alex
    密码:456
    lst=["alex_123", "alex_456", "wusir_123", "wusir_456", "alex_789"]
    m=list(map(lambda s:"yes" if s=="alex_456" else "false" ,lst))
    print(m)
    m=list(map(lambda s:s.split("_")[0]=="alex" and  s.split("_")[1] =="123" ,lst))
    print(m)
    print("__iter__" in dir(list))
    
    例三:计算两个列表相同位置的数据的和
    lst1 = [1, 2, 3, 4, 5]
    lst2 = [2, 4, 6, 8, 10]
    print(list(map(lambda x, y: x+y, lst1, lst2)))
    

      

    五;递归:在函数中调用函数本身,就是递归(python中最大递归深度998)

    例一
    def func():
         print("我是谁")
         func()
    func()
    def foo(n):
         print(n)
        n += 1
        foo(n)
    foo(1)
    递归的应⽤: 
     我们可以使用递归来遍历各种树形结构, 比如我们的文件夹系统.
     可以使用递归来遍历该文件夹中的所有文件
    def func(path, ceng): # path: d:/a
        lst = os.listdir(path)
        for el in lst: # 哈哈
            # el 文件名
            rp = os.path.join(path, el) # d:/a/哈哈
            if os.path.isdir(rp):
                print("	"*ceng, el, sep="")
                func(rp, ceng+1)
            else:
                print("	"*ceng,el, sep="")
    func("e:/哈哈", 0)
    
    lst = os.listdir(path) # 打开一个文件夹. 获取到文件夹内的所有内容 ["a","b"]
    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)
    

     

    六. 二分查找
    二分查找. 每次能够排除掉⼀半的数据. 查找的效率非常⾼. 但是局限性比较大. 必须是有
    序序列才可以使用二分查找
    要求: 查找的序列必须是有序序列.

    判断n是否在lst中出现,如果出现请返回n所在的位置
    1.二分法查找-----非递归算法
    lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
     n = 567
    left = 0
    right = len(lst) - 1
    count = 1
    while left <= right:
         middle = (left + right) // 2
         if n < lst[middle]:
             right = middle - 1
         elif n > lst[middle]:
             left = middle + 1
         else:
             print(count)
             print(middle)
             break
         count = count + 1
    else:
         print("不存在")       
    
    2. 普通递归版本⼆分法
    def binary_search(n, left, right):
         if left <= right:
             middle = (left+right) // 2
             if n < lst[middle]:
                 right = middle - 1
             elif n > lst[middle]:
                 left = middle + 1
             else:
                 return middle
         return binary_search(n, left, right) 
    # 这个return必须要加. 否则接收到的永远是None.
         else:
             return -1
    print(binary_search(567, 0, len(lst)-1))
    3. 另类⼆分法, 很难计算位置.
    def binary_search(ls, target):
         left = 0
         right = len(ls) - 1
         if left > right:
             print("不在这⾥")
         middle = (left + right) // 2
         if target < ls[middle]:
             return binary_search(ls[:middle], target)
         elif target > ls[middle]:
             return binary_search(ls[middle+1:], target)
         else:
             print("在这⾥")
    binary_search(lst, 567)            
    

      

  • 相关阅读:
    Python该怎么学?
    Python招聘需求
    最短路合集
    最小生成树prim算法
    最小生成树kruskal算法
    React-redux原理探索
    Redux原理探索
    头条前端面试题汇总,会持续更新
    阿里前面面试题(最全),持续更新中
    ASP.Net MVC3/4中Model验证错误信息的本地化
  • 原文地址:https://www.cnblogs.com/liucsxiaoxiaobai/p/9910781.html
Copyright © 2011-2022 走看看