今天处理的数据集里,图片同时有 “.jpg” 和 “.JPG” 两种后缀名,因此我要实现一个 找出所有不同后缀图片 的功能。一开始,实现该功能的模块我是这么写的:
check_suffix = lambda x : True if os.path.splitext(x)[1] == (".jpg" or ".JPG" or ".png" or ".PNG") else False
代码也run起来了。但是回头检查的时候一看,哎不对,为什么只有 “.jpg” 后缀名的图片被处理了。
在debug过程中,我发现上面的功能模块只会筛选出 “.jpg” 后缀名的图片。
定位出问题在 (".jpg" or ".JPG" or ".png" or ".PNG")
后,我写了两行代码查看:
print(".jpg" and ".JPG") # .JPG
print(".jpg" or ".JPG") # .jpg
打印结果如下:
.JPG
.jpg
百思不得其解的同时,想上网查又不晓得这个问题该如何去定义它。
大神远在天边,近在眼前。于是我求助了同门,他的解答我觉得应该是最靠谱的解释了,即从 and
和 or
的定义出发来思考:
and
本身的定义,所以当第一个 ".jpg"
不为 空
时,结果取决于第二个值 ".JPG"
,所以直接返回 ".JPG"
。or
本身的定义,所以当第一个 ".jpg"
不为 空
时,结果即为第一个值,所以直接返回 ".jpg"
。