简单的返回函数,还有什么比Pythonic更重要?

简单的返回函数,还有什么比Pythonic更重要?,python,Python,我找不到答案的简单问题 以功能为例: 鉴于else和两个return语句之间的对齐间距,下面的内容看起来不错,即可读性更强。然而,其他的完全没有意义,这让它感觉有点脏 def get_val(self): if long_var < other_long_var and var < other_var: return true else: return false 然而,下面的内容不那么易读,只是略显易懂。它更优雅,因为没有其他无用

我找不到答案的简单问题

以功能为例:

鉴于else和两个return语句之间的对齐间距,下面的内容看起来不错,即可读性更强。然而,其他的完全没有意义,这让它感觉有点脏

def get_val(self):
    if long_var < other_long_var and var < other_var:
        return true
    else:
        return false 
然而,下面的内容不那么易读,只是略显易懂。它更优雅,因为没有其他无用的东西

def get_val(self):
    if x:
        return true
    return false 
这两种风格都有蟒蛇式的倾向吗

如果不是,是否完全由开发人员决定

编辑:要清楚,这是一个示例函数。我试图表达对一个函数的需求,这个函数有一个条件并返回true或false。
这是一个纯粹的文体问题

对于您给出的示例来说,它应该是最小和完整的,这两个选项都是清晰和容易理解的

最简单、最具Python风格的方法是:

def get_val(self):
    return bool(x)
让我谈谈更一般的情况。从本文件中引用:

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

虽然第二个选项看起来更优雅,但它也很模糊:您返回False是因为x为False,还是因为之前的return语句都没有被触发

考虑一个稍微复杂一点的例子,我建议使用final return语句为您提供一些默认选项、警告或ValueError

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

对于您给出的示例,它应该是最小的和完整的,这两个选项都很清楚并且易于理解

最简单、最具Python风格的方法是:

def get_val(self):
    return bool(x)
让我谈谈更一般的情况。从本文件中引用:

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

虽然第二个选项看起来更优雅,但它也很模糊:您返回False是因为x为False,还是因为之前的return语句都没有被触发

考虑一个稍微复杂一点的例子,我建议使用final return语句为您提供一些默认选项、警告或ValueError

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

在这种情况下,我希望:

def get_val(self):
    return x
对于熟悉Python的有经验的程序员来说,它是可读的 性能比下面的任何东西都要快,尽管差别很小 其次,在我看来,在codewars.com上仍然经常看到pythonic:

def get_val(self):
    return True if x else False
但我想,风格指南会推荐:

def get_val(self):
    if x:
        return True
    else:
        return False
你的第二个例子可能不是很像蟒蛇

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

def get_val(x):
    if x == "": return yz
    elif x == "B": return xyz
    else: return z
不过,这可能是Python中的开关/大小写模拟
我不认为样式指南会支持这一点…

在这种情况下,我更喜欢:

def get_val(self):
    return x
对于熟悉Python的有经验的程序员来说,它是可读的 性能比下面的任何东西都要快,尽管差别很小 其次,在我看来,在codewars.com上仍然经常看到pythonic:

def get_val(self):
    return True if x else False
但我想,风格指南会推荐:

def get_val(self):
    if x:
        return True
    else:
        return False
你的第二个例子可能不是很像蟒蛇

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

def get_val(x):
    if x == "": return yz
    elif x == "B": return xyz
    else: return z
不过,这可能是Python中的开关/大小写模拟
我不认为样式指南会支持这一点…

如果您只是想知道paramater的值是真是假,那么可以使用python的内置函数bool

此外,您还应查看官方文件:


如果您在python中创建的函数是True,则可以尝试使用来查找它的值

此外,您还应查看官方文件:


希望有帮助。

为什么不使用return x?@ktzr我希望你指的是return boolx。为什么你认为这不那么可读。此外,这一点已经讨论过了@[使用if-return或if-else返回更有效?]如果x-else,也可以返回TrueFalse@miradulo如果您知道x是bool,那么返回x更有意义。或者,如果你知道你的呼叫方只关心val的真实性,而不是实际的val。当然,在这样一个没有意义的名称的玩具示例中,除了引起名称错误之外什么都不做,很难猜测实际的用法是什么……为什么不使用return x?@ktzr我希望你指的是return boolx。为什么你认为这不那么可读。此外,这一点已经讨论过了@[使用if-return或if-else返回更有效?]如果x-else,也可以返回TrueFalse@miradulo如果您知道x是bool,那么返回x更有意义。或者,如果你知道打电话的人只关心val的真实性,而不是实际的val。当然,在这样一个没有意义的名字的玩具示例中,除了引起一个名字错误之外什么都不做,很难猜出实际的用法是什么样的……你可能想证明为什么你认为它是不明确的。谢谢你的反馈,我已经包括了一个非常简单的pythonic选项和一些关于更一般情况的想法。@DanielLenz谢谢你的回答。Python引用优雅地回答了这个问题,正如你所说的那样。你的最后一个例子确实解释了我的第二个例子背后的逻辑
回答:“默认情况下,返回false,除非这是真的”,但它也有一些模糊性,正如你所说的。你可能想证明为什么你认为它是模糊的。谢谢你的反馈,我已经包括了一个非常简单的pythonic选项和一些关于更一般情况的想法。@DanielLenz谢谢你的回答。Python引用优雅地回答了这个问题,正如你所说的那样。你的最后一个例子确实解释了我的第二个答案背后的逻辑,“默认返回false,除非这是真的”,但正如你所说的,它也有一些模糊性;这是我的一半。另一半是值或函数的dict。做一行程序的事情…PEP8强烈反对这样做,但是对于像这样非常琐碎的情况,您甚至可以在一些核心开发人员的代码中看到它。但是,如果链足够长,节省垂直空间就很重要,那么dict可能会更清晰,启动起来也更高效……谢谢你的评论,abarnert。没错,口述会更清楚。是的,官方的建议可能会阻止一行。但有时,在codewars.com上,我发现简短的解决方案非常诱人。使用elif链来代替开关/机箱绝对是一种Pythonic;这是我的一半。另一半是值或函数的dict。做一行程序的事情…PEP8强烈反对这样做,但是对于像这样非常琐碎的情况,您甚至可以在一些核心开发人员的代码中看到它。但是,如果链足够长,节省垂直空间就很重要,那么dict可能会更清晰,启动起来也更高效……谢谢你的评论,abarnert。没错,口述会更清楚。是的,官方的建议可能会阻止一行。但有时,在codewars.com上,我发现简短的解决方案非常诱人。