python学习笔记15 匿名函数,递归等

lamda 匿名函数

lambda 参数: 返回值

def  func(n):

    return n*n 

a = lamda x: x*x

.__name__ 查看函数名

1 函数参数可以有多个,用逗号隔开

2 匿名函数只能写一行,逻辑结束后直接返回数据,不能完成复杂参数

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

 

sorted()  对所有可迭代的对象进行排序操作。

sorted(iterable, key=None, reverse=False) 
  • iterable -- 可迭代对象。
  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。(这个说明听起来比较绕,key其实就是排序规则,通常用函数代替,作用过程是通过将可迭代对象的元素分别代入函数得到对应返回值,然后以此返回值为排序维度进行排序)
  • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
lst =   [
        {'id':1,'name':'alex','age':28},
        {'id':2,'name':'wusir','age':38},
        {'id':3, 'name': 'godness', 'age': 21},
        {'id':4, 'name': 'ritian', 'age': 58},
        ]

l1 = sorted(lst, key=lambda dic:dic['age'])
print(l1)

 

filter() 用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

filter(function, iterable)

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

lst = [1,2,3,4,5,6,7,8,9]
print(list(filter(lambda i:i%2==1,lst)))

 

map() 会根据提供的函数对指定序列做映射。

map(function, iterable, ...)

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

lst1 = [1,2,3,4,56,7]
lst2 = [66,456,98,345,654,8,87]
print(list(map(lambda x,y:x+y,lst1,lst2)))

 

递归 

def func(i):
    if i <100:
        print('我是谁,我在哪里?{}'.format(i))
    func(i+1)
func(1)

python官网称递归最大深度为1000,但是永远到不了1000

sys.setrecursionlimit(递归数) 调整递归最大深度

递归最大用处是遍历树形结构

os.listdir(path) 用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序。 它不包括 '.' 和'..' 即使它在文件夹中,只支持在 Unix, Windows 下使用。查看文件夹中的文件 返回值为可迭代对象iterable。

os.path.isdir(path) 判断路径是否为目录

os.path.join(path1[, path2[, ...]]) 把目录和文件名合成一个路径 通常用于在遍历时将相对路径变为绝对路径,才能进行迭代遍历,否则从第2层迭代开始的迭代函数获得的参数是相对路径,无法向下迭代.

# 遍历树形结构
import os                                               #引入os模块
filepath = 'D:\sylar\python_workspace'                  #获得初始文件夹地址

def read(filepath,n):  #打开文件夹
    dir_fat = os.listdir(filepath)                      #获得下一层文件/文件夹列表
    for dir_son in dir_fat:                             #对本层开始遍历
        dir_son_full = os.path.join(filepath,dir_son)   #将相对路径转化为绝对路径
        if os.path.isdir(dir_son_full):                 #判断是否为文件夹
            print('-->'*n,dir_son)                      #是文件夹的话迭代调用本程序
            read(dir_son_full,n+1)                      #并打印本文件夹名
        else:
            print('-->'*n,dir_son)                      #不是文件夹的话打印本文件名

read(filepath,0)                                        #调用函数,开始遍历

 

二分法

拿有序序列的中间值跟目标值比较,判断目标值是在左还是在右,并对序列进行二分缩小查询范围. 二分法查询效率很高

lst1 = [12,23,34,45,56,67,78,89,100,123,234,345,456,567,678,789,890]
n = 567

def num_search(lst1_left,lst1_right,n):
    lst1_middle = (lst1_left+lst1_right)//2
    if n < lst1[lst1_middle]:
        lst1_right = lst1_middle-1
    elif n >lst1[lst1_middle]:
        lst1_left = lst1_middle+1
    else:
        return lst1_middle
    return num_search(lst1_left,lst1_right,n)

print(num_search(0,len(lst1)-1,n))
print(lst1[num_search(0,len(lst1)-1,n)])

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值