lambda表达式,被称为匿名函数,如:lambda x, y : x+y,冒号前的x、y是所需参数,冒号后的x+y是所要运行的表达式,返回值就是计算后的结果,如:(lambda x, y : x+y)(1, 2),结果为3。
参见:如何将yolo的标注(annotations).txt 坐标转换成tensorflow-yolov3(YunYang1994)的.txt 标注坐标?
# (3)用lambda配合正则表达式(将filenames中对象一一取出赋给x,通过冒号后的表达式运算后将结果返回给key)
# 数字字符串排序貌似还是以字符顺序而不是数字大小来排的,
# 可能要先转化为数字(而re.findall('\((.*?)\)', x)返回的是字符串列表,要把它转换成数字列表)
filenames.sort(key=lambda x: list(map(eval, re.findall('\((.*?)\)', x))))
lambda表达式的使用方法
import colorsys
hsv_tuples=[(0.0, 1.0, 1.0),(0.5,0.5,0.5)]
print(list(map(lambda x:colorsys.hsv_to_rgb(*x),hsv_tuples)))
结果:
[(1.0, 0.0, 0.0), (0.25, 0.5, 0.5)]
参数前带个*表示元组,
里是因为colorsys.hsv_to_rgb函数所需传入对象必须是元组,map函数则要求hsv_tuples为可迭代对象
tuples=[(1,2),(3,4)]
print(list(map(lambda x:((lambda a,b:a+b)(*x)),tuples)))
结果:
[3, 7]
这里使用了两次嵌套的lambda表达式,其中借鉴了lambda表达式的用法之一:
add = lambda x, y : x+y
add(1,2) # 结果为3
当然,用下面这种方法也是可以的:
tuples=[(1,2),(3,4)]
print(list(map(lambda x:x[0]+x[1],tuples))) # [3, 7]
参考文章:python – lambda表达式