python: and & or 探究

起因

今天处理的数据集里,图片同时有 “.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

在debug过程中,我发现上面的功能模块只会筛选出 “.jpg” 后缀名的图片。

定位出问题在 (".jpg" or ".JPG" or ".png" or ".PNG") 后,我写了两行代码查看:

print(".jpg" and ".JPG") # .JPG
print(".jpg" or ".JPG") # .jpg

打印结果如下:

.JPG
.jpg

百思不得其解的同时,想上网查又不晓得这个问题该如何去定义它。

答案

大神远在天边,近在眼前。于是我求助了同门,他的解答我觉得应该是最靠谱的解释了,即从 andor 的定义出发来思考:

  • 因为 and 本身的定义,所以当第一个 ".jpg" 不为 时,结果取决于第二个值 ".JPG" ,所以直接返回 ".JPG"
  • 因为 or 本身的定义,所以当第一个 ".jpg" 不为 时,结果即为第一个值,所以直接返回 ".jpg"
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值