• python D14 内置函数二


    # 内置函数二
    # 1、lambda匿名函数
    # 2、sorted()
    # 3、filter()
    # 4、map()
    # 5、递归函数

    # 一、lambda匿名函数
    # 未来解决一些简单的需求而设计的一句函数
    # func = lambda n: n**n # n的n次方
    # print(func(5))
    # lambda表示的是匿名函数,不需要用def来声明,一句话就可以声明出一个函数
    # 语法:
    # 函数名 = lambda 参数: 返回值
    # 注意:
    # 1、函数的参数可以有多个,多个参数之间用逗号隔开
    # 2、匿名函数不管多复杂,只能写一行,且逻辑结束后直接返回数据
    # 3、返回值和正常的函数一样,可以是任意数据类型

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

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

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

    # 三、filter()
    # 筛选函数
    # 语法:filter(function, Iterable)
    # function:用来筛选的函数,在filter中会自动的把ilterable中的元素传递给function
    # 然后根据function返回值得True或者False来判断是否保留此项数据
    # ilterable:可迭代对象
    # lst = [1, 2, 3, 4, 5, 6, 7] # 筛选偶数
    # lst_new = filter(lambda num: num % 2 == 0, lst)
    # print(lst_new) # <filter object at 0x00A327D0> 可迭代对象
    # print(list(lst_new))

    # 四、map()
    # 映射函数
    # 语法:map(function,iterable)可以对可迭代对象中的每一个元素进行映射,分别
    # 取执行function
    # 计算列表每个元素的平方,放回新列表,与lambda连用
    # lst = [1, 2, 3, 4, 5]
    # lst_new = map(lambda num: num**2, lst)
    # print(lst_new) # <map object at 0x03432510>
    # print("__iter__" in dir(lst_new)) # True
    # print(list(lst_new)) # [1, 4, 9, 16, 25]

    # 五、递归
    # 在函数中调用函数本身,就是递归
    # def func():
    # print("我是谁")
    # func()
    # func()

    # 在python中递归的深度最大到998

    # 递归的应用:
    # 我们可以使用递归来遍历各种树形结构,比如我们的文件夹系统,可以使用递归来遍历该
    # 文件夹中的所有文件
    # import os
    # def func(file,ceng):
    # files = os.listdir(file)
    # for fn in files:
    # new_files = os.path.join(file, fn)
    # if os.path.isdir(new_files):
    # print(" "*ceng, fn)
    # func(new_files, ceng + 1)
    # else:
    # print(" "*ceng, fn)
    # 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)

    # os:文件操作函数
    # os.listdir():将目标文件所有文件名放在一个列表里
    # os.path.join():拼接文件夹
    # os.path.isdir():判断是否为文件夹

    # os : 和操作系统相关的一些功能
    # os.listdir("d:/") 帮我们打开一个文件夹. 返回文件夹内的所有内容(文件的名字)
    # os.path.join("马化腾","马云") 马化腾/马云
    # os.path.isdir(路径) 判断这个路径是文件夹还是文件

    # 六、二分法查找
    # ⼆分查找. 每次能够排除掉⼀半的数据. 查找的效率非常⾼. 但是局限性比较⼤. 必须是有
    # 序序列才可以使⽤⼆分查找
    # 要求: 查找的序列必须是有序序列.
    # 判断n是否在lst中出现. 如果出现请返回n所在的位置
    # lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]

    # 二分法查找——非递归算法(优选)
    # n = int(input("请输入一个数:"))
    # left = 0 # 列表的左边界
    # right = len(lst) - 1 # 列表的右边界
    # while left <= right: #d当左边界大于右边界则没找打这个数,循环借宿
    # mid = (left + right) // 2
    # if n < lst[mid]: # 你输入的数小于中间值则右边界为 mid -1
    # right = mid -1
    # if n > lst[mid]: # 你输入的数小于中间值则左边界为 left -1
    # left = mid + 1
    # if n == lst[mid]:
    # print("有")
    # break
    # else:
    # print("没有")

    # 二分法——递归
    # lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
    # n = int(input("请输入一个数:"))
    # def func(lst, n, left, right):
    # mid = (left + right) // 2
    # if left > right:
    # print("没有")
    # return False
    # if n < lst[mid]:
    # right = mid - 1
    # return func(lst, n, left, right)
    # if n > lst[mid]:
    # left = mid + 1
    # return func(lst, n, left, right)
    # if n == lst[mid]:
    # print("有")
    # return True
    # # func(lst, n, 0, (len(lst)-1))
    # result = func(lst, n, 0, (len(lst)-1))
    # print(result)

    # 切换列表
    # lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
    # n = int(input("请输入一个数:"))
    # def func(lst,n):
    # left = 0
    # right = len(lst)-1
    # mid = (left + right) // 2
    # if n < lst[mid]:
    # return func(lst[:mid], n)
    # elif n > lst[mid]:
    # return func(lst[mid+1:], n)
    # elif len(lst) == 0:
    # print("没有")
    # return False
    # else:
    # print("找到了")
    # return True
    # func(lst,n)
    # print(func(lst,n))

    # 七、递归深度
    # python中最大的递归深度是1000 但是你永远到不了1000
  • 相关阅读:
    JqGrid在IE8中表头不能分组的解决办法
    Task 异步小技巧
    封装好的socket,拿去用
    反射 实现不同模型相同属性赋值 第二集(automapper)
    .net破解二(修改dll)
    .net破解一(反编译,反混淆-剥壳)
    c/s 自动升级(WebService)
    反射实现不同模型相同属性赋值
    row_number() over()分页查询
    SQL函数
  • 原文地址:https://www.cnblogs.com/z520h123/p/9911416.html
Copyright © 2020-2023  润新知