
"a and b or c" 这是 Python 里经常用到的很方便的一个表达式,被用的很频繁。
intval > 1 and val1 or val2 如果 intval > 1 表达式为真返回 val1 否则返回 val2 ,但这只是其中一种逻辑。
(intval > 1 and val1) or val2 如上:如果 val1 是逻辑否,那么就会返回 val2 ,当你就是想返回一个逻辑否的值时,比如 (0,[],{},False,''),那么这个表达式就不能这么用了。
应该用:
val1 if intval > 1 else val2
前段时间系统莫名其妙出现一个 bug ,查找半天发现很早以前不注意埋下了这个坑,耽误好多时间。
1 loading 2016-05-20 20:17:32 +08:00 via Android 像我这种菜鸟,我会写成多行……脑袋不行! |
2 lxy 2016-05-20 20:32:21 +08:00 一直都用 if else 。 顺便也分享最近一个坑。 >>> False in [0, 1] True >>> False is 0 False >>> False == 0 True >>> all([0, 1]) False |
3 Kilerd 2016-05-20 20:36:32 +08:00 像我这种菜鸟,我会打上括号......脑袋不行! |
4 aias 2016-05-20 20:41:52 +08:00 via Android 像我这种菜鸟,我会少用 python … py 不行! |
5 jhaohai 2016-05-20 20:43:55 +08:00 via iPhone 不用语法糖,不用缩写,省的以后别人甚至自己看不懂 |
6 ukauka 2016-05-20 20:50:33 +08:00 老老实实用?:不好吗 |
8 jiang42 2016-05-20 20:53:41 +08:00 via iPhone |
9 laoyur 2016-05-20 20:54:37 +08:00 像我这种菜鸟,根本就不知道楼主这种用法 我压根只会 xxx if yyy else zzz 这种,这还是想找 6 楼的替代用法时学会的 |
10 alexapollo 2016-05-20 20:56:33 +08:00 scala 还是比 python 好用的 |
11 qqmishi 2016-05-20 21:06:24 +08:00 吃语法糖一时爽,,, |
12 eric6356 2016-05-20 21:11:23 +08:00 via iPhone and or 一般用来把布尔值简单地映射成别的值吧。更复杂的逻辑要用 inline if 了。 |
13 C0VN 2016-05-20 21:13:22 +08:00 > import this |
14 imn1 2016-05-20 21:19:49 +08:00 我的笔记 三元式 1. a = b if 条件 else c 2. a = (c, b)[条件] # 注意 False 对应值在前面, b 和 c 也应事实存在 3. a = 条件 and b or c # 此用法有一定逻辑问题 |
15 wingyiu 2016-05-20 21:49:44 +08:00 and or 不是 && ||吗吗吗吗吗? 怎么会有人用来输出值? |
16 latyas 2016-05-21 08:46:01 +08:00 人工合理混淆 |
18 WangYanjie 2016-05-21 12:29:38 +08:00 我觉得这不算坑吧,是写的人自己疏忽,你用 if 写的时候也是要写成这样 if interval > 1 才对? @lxy is 比较地址, == 比较实际的值, False 其实是一个常量 我觉得坑是指明显的错误,比如 coding:utf-8 和 coding:utf8 的区别, 不是指一些 Python 明确指出的特色,虽然也许有人觉得不合理。 |
19 ayaseangle 2016-05-21 16:37:26 +08:00 这就是所谓的 pythonic 吗? |
21 mulog 2016-05-23 15:29:44 +08:00 这种用法比 val1 if intval > 1 else val2 也不少打几个字啊,何必呢。。 |