if-not one-liners避免重复的块,这是python风格的问题

时间:2015-01-06 02:45:30

标签: python coding-style

我正在开发一个个人API项目,该项目涉及接受包含许多必需关键字的请求。因此,我发现自己在防御性地编写了大量代码,如下所示:

def post(self, urlSafeKey=None):
    if urlSafeKey:
       # do a bunch 
       # of stuff
       # here
    else:
       self.abort(400, detail="A key parameter is required")

为了便于阅读,我被告知更喜欢if - else而不是if not测试底片,但是当我通过并将所有这些块更改为类似的内容时......

def post(self, urlSafeKey=None):
    if not urlSafeKey: self.abort(400, detail="A key parameter is required")
    # do a bunch 
    # of stuff
    # here

......它看起来更清洁,更短,但我担心这是一种讨厌的风格习惯,最后可能不太清楚。

在Python世界中对此有共识吗?

2 个答案:

答案 0 :(得分:2)

一般来说,遵循最佳做法是best practice。我不推荐在线发言。但我认为not urlSafeKey的测试没有错。

def post(self, urlSafeKey=None):
    if not urlSafeKey:
       self.abort(400, detail="A key parameter is required")
    # do a bunch 
    # of stuff
    # here

答案 1 :(得分:2)

假设self.abort引发异常(从而终止函数post),我认为最好避免将正常情况代码嵌套在if中。 import this在一个交互式口译员的提示下,提醒人们注意“禅宗的禅宗”,其中一个是“扁平比嵌套更好”: - )。

至于单线

if not urlSafeKey: self.abort(400, detail="A key parameter is required")

我的个人品味有点长 - 我更喜欢if - 基于一个衬垫仅限于非常简短的案例,例如if cond: returnif cond: continue,{{ 1}},否则使用两行。但这是一个小问题(纯粹的词汇!)问题,而不是更喜欢避免嵌套(即检查“我已经完成”条件并在你知道完成时退出函数或循环), Python-Zen级问题! - )