简单的返回功能,什么更Pythonic?

时间:2018-05-16 18:09:53

标签: python

我无法找到答案的简单问题。

采取功能:

下面的看起来很好,即更可读,给定else和两个return语句之间的对齐间距。然而,其他方面完全没有意义,这让它感觉有点脏。

def get_val(self):
    if long_var < other_long_var and var < other_var:
        return true
    else:
        return false 

注意两个条件和长行,这是为了表示以下内容不适用于此示例:

return true if this else false

然而,下面的内容并不是可读的,只是略微可读。它更优雅,因为省略了无用的其他东西。

def get_val(self):
    if x:
        return true
    return false 

这些风格中是否存在Pythonic偏见?

如果没有,这纯粹取决于开发者吗?

编辑:要清楚,这是一个示例函数。我试图表达需要一个具有条件并返回true的函数的函数。 这是一个纯粹的风格问题

3 个答案:

答案 0 :(得分:3)

如果你只是试图找出参数的值是True还是False,你可以使用python的内置函数 bool

x = ""
bool(x)
>>> False

x = "something"
bool(x)
>>> True

另外,您应该查看官方文档: https://docs.python.org/3.6/library/functions.html

希望它有所帮助。

答案 1 :(得分:2)

在这么短的情况下,我更愿意:

def get_val(self):
    return x
  • 对于有经验的程序员(懂Python的人)来说,它是可读的。
  • 性能比以下任何东西都快,但差异很小

其次,在我看来仍然是pythonic(常见于codewars.com):

def get_val(self):
    return True if x else False

但我猜,风格指南会推荐:

def get_val(self):
    if x:
        return True
    else:
        return False

你的第二个例子可能不是非常pythonic ...

在codewars.com中,我也经常看到:

def get_val(x):
    if x == "": return yz
    elif x == "B": return xyz
    else: return z
但是,

可能是Python中的一种切换/案例模仿 我不认为风格指南会支持这个......

答案 2 :(得分:0)

对于你给出的例子(这是最小和完整的,应该是这样),两个选项都清晰易懂。

最简单(也是最pythonic)的方式是:

def get_val(self):
    return bool(x)

让我评论一个更一般的案例。引自import this

  

面对模棱两可,拒绝猜测的诱惑。

虽然第二个选项可能看起来更优雅,但它也含糊不清:您是因为Falsex而返回False,还是因为之前的return语句都没有被触发了吗?

考虑到一个稍微复杂的例子,我建议使用最终的return语句给你,例如一些默认选项,警告或ValueError。

def myfunc(x, mode):
    if mode == 'square':
        return x**2
    if mode == 'cube':
        return x**3
    return x