1
21grams 2014-11-20 10:30:44 +08:00
一般来说第二种,可读性更好
|
2
yjsslab 2014-11-20 10:49:44 +08:00
尽量不在if里使用否定吧,也就是尽量不用unless
|
3
vulgur 2014-11-20 10:55:45 +08:00
我是第一种,不过不写“is not None”,就是“if something”
|
4
tabris17 2014-11-20 10:59:43 +08:00 1
分清主次
big_block_of_code()是程序的主干 something is None 之后是分支,次要的 应该把次要的分支写在if里 |
5
jimwoo 2014-11-20 11:05:31 +08:00
- -!什么东西??看不懂!!我只看到了标题!
|
6
jinyang656 2014-11-20 11:37:18 +08:00
@jimwoo 因为lz放了个gist,但是由于某些原因就看不到了 你懂的
|
7
mulog 2014-11-20 11:42:08 +08:00
|
8
rwx 2014-11-20 11:59:47 +08:00
个人来说第二种
习惯把异常或者错误情况排除之后再写主逻辑,尽可能减少if嵌套 |
11
Ge4Los 2014-11-20 13:06:53 +08:00
我用第二种, 优先跳出异常或错误, 然后执行主要代码;
主要代码的缩进会靠前, 更容易阅读 |
12
ytll21 2014-11-20 13:26:04 +08:00
说看不见的看这个
# First style if something is not None: # or whatever condition big_block_of_code() # Second style if something is None: # or whatever condition continue # or return None or whatever big_block_of_code() |
14
xidianlz 2014-11-20 13:35:43 +08:00
if something is not None:
为啥不用 if something: 这样不是更pythonic一点? |
16
xudshen 2014-11-20 13:39:16 +08:00
第二个
|
17
xudshen 2014-11-20 13:40:30 +08:00
相对来说少缩进一层,
|
18
imn1 2014-11-20 13:40:46 +08:00
貌似这两个逻辑不同
单一条件不会有太大区别,只是可读性的问题,如果多条件,可以考虑以下短路方式减少判断 |
19
rebornix 2014-11-20 14:02:41 +08:00
如果代码比较复杂,我觉得通过fast return来减少内嵌层级比较好。倾向第二种。
|
20
clino 2014-11-20 14:52:12 +08:00
@faceair 我用chinadns一样不行阿
2014-11-20 14:51:10 INFO request gist.github.com 2014-11-20 14:51:10 INFO response gist.github.com: [('203.161.230.171', 1, 1)] |
21
xidianlz 2014-11-20 15:03:15 +08:00
@Sylv something = 0时候
something和something is not None不都是True么? |
22
regmach 2014-11-20 15:14:26 +08:00
我喜欢第二种
|
24
yetone 2014-11-20 18:42:04 +08:00
第二种学名是防御式编程,推荐的写法。
|
26
hustlzp 2014-11-20 21:13:25 +08:00
个人第二种
|
27
cvrock 2014-11-20 21:45:37 +08:00
显然是要分情况的,第一种情况可能会导致if嵌套太深,第二种情况可能会导致每个if内都有一个返回的出口,需要根据具体场景决定选择哪种写法。
|
28
fish748 2014-11-21 01:29:11 +08:00
现在用第二种,嵌套少一层。
|
29
lightening 2014-11-21 03:56:35 +08:00
if some_condition
do_something end def do_something big_block_of_code end |
30
dreampuf 2014-11-21 04:13:14 +08:00
TLTR: “等于”比“不等于”更符合直觉,避免嵌套优先执行异常分支。选第二种。
via. Code Complete 2nd Summary of Techniques for Reducing Deep Nesting The following is a list of the techniques you can use to reduce deep nesting, along with references to the sections in this book that discuss the techniques: - Retest part of the condition (this section) - Convert to if-then-elses (this section) - Convert to a case statement (this section) - Factor deeply nested code into its own routine (this section) - Use objects and polymorphic dispatch (this section) - Rewrite the code to use a status variable (in Section 17.3) - Use guard clauses to exit a routine and make the nominal path through the code clearer (in Section 17.1) - Use exceptions (Section 8.4) - Redesign deeply nested code entirely (this section) |
31
dingyaguang117 2014-11-21 09:42:50 +08:00
第二种
|
32
whalegia 2014-11-22 04:31:33 +08:00
这种这么细节的知识你们是在哪里看的啊……orz
我不看到这种讨论贴就根本不知道 |
33
jox 2014-11-22 09:39:57 +08:00
我尽量不在选择分支里进行这种判断,选择分支里的值只有两个,逻辑真或逻辑假,如果在某个对象的值不存在的时候会使用函数或者提前计算得到布尔值,然后再进行判断。类似这样的:
if isItExist(object): -- ... else: -- ... 函数isItExist()的返回类型是布尔值 |