"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 2
一直都用 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
xavierskip 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 也不少打几个字啊,何必呢。。
|