Python 里你们会把 if 写成单行吗(`if cond:doit()`)?

2019-03-18 17:51:34 +08:00
 Vegetable

有时候判断一个条件,决定是不是执行一个方法. 今天看了一下自己写的代码里,出现了不少这种类似的判断,写的时候没多想,review 的时候比较纠结.觉得不好看

if dirty:
    clean()

网上看到很多人喜欢写这样的代码,不幸的是,我使用 autopep8 会自动换行,写成这样也白扯

if dirty:clean()

这样效果看起来也一样,但是这就是赋值语句拿来做流程控制好像不太合适,可读性也有一些损失.

dirty and clean() 

clean() if dirty else None

写完这几行字我决定不改这一部分了

5986 次点击
所在节点    Python
26 条回复
nfroot
2019-03-18 19:17:35 +08:00
写同一行看的时候不是很喜欢
cxyfreedom
2019-03-18 19:21:54 +08:00
这个我遵循 pylint 提示换行
Leigg
2019-03-18 19:31:53 +08:00
省略这一行代码换来的是可读性的缺失,并不值当。
Leigg
2019-03-18 19:33:06 +08:00
if else 的简洁我一般只在逻辑很简单时这样干
youngce
2019-03-18 19:36:32 +08:00
我自己基本不这么写。。。读过的一些 python 项目源码里也没有见大佬们这么写。
主要是真的不好看吧
whileFalse
2019-03-18 21:10:28 +08:00
clean() if dirty else None

我怎么觉得这句话中 clean()总是会被调用?
Leigg
2019-03-18 21:15:11 +08:00
@whileFalse 并不会
Leigg
2019-03-18 21:43:31 +08:00
py3 可以写的更优雅一点,利用省略号这种文法。
func( ) if xx else ...
shn7798
2019-03-18 22:09:36 +08:00
比较喜欢第一种写法,判断条件和逻辑分支识别度很高。
第二种写法一眼看去需要花点时间去区分,看起来比较累。
第三种写法是 Perl 时代的风格,write only,当然破解之法就是写诗,哈哈。
Kirscheis
2019-03-18 22:50:46 +08:00
dirty and clean() 也太危险了。。万一有一天他们决定从右边开始短路怎么办。。😂
yim7
2019-03-18 23:14:48 +08:00
第一种很好,逻辑清晰,第二种是被 c 洗脑的哈皮写的,后面两个都是没事找事,代码可读性最重要
Qzier
2019-03-19 00:15:01 +08:00
不会,因为不符合 PEP8
jerrylogin
2019-03-19 03:46:59 +08:00
可以啊。。。。pylint 不会报错啊 。。。。不是和 list comprehension 很像吗
binux
2019-03-19 04:20:13 +08:00
我一般只在两个场合这么写:

1. if condition: return

2. 多个
if condition_a: do_a()
if condition_b: do_b()
if condition_c: do_c()

但是我很多年不写 python 了。
l4ever
2019-03-19 08:39:10 +08:00
vscode->右键->格式化文档
Ginson
2019-03-19 09:01:17 +08:00
一般只会在简单的条件赋值上这样写,比如 x = 1 if y > 0 else 2
aaa5838769
2019-03-19 09:25:09 +08:00
一般不这么干。。自己都看不下去。
HelloAmadeus
2019-03-19 09:30:49 +08:00
标准库里有很多这样一行的代码
Vegetable
2019-03-19 09:43:42 +08:00
@whileFalse
@Leigg
我测试了一下
```
clean() if dirty else ...
```
这种写法会执行 clean(),@whileFalse 说的对
Vegetable
2019-03-19 09:45:14 +08:00
@whileFalse
@Leigg

...不是是我看错条件了,不会

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/545879

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX