是否可以使用if语句编写单行return语句?

时间:2013-09-07 04:49:58

标签: python

是否可以从python中的单行方法返回

寻找类似的东西

return None if x is None

在上面尝试过,它是无效的语法

我很容易做到:

if x is None:
    return None

但是好奇我是否可以将上面的if语句组合成一行

4 个答案:

答案 0 :(得分:51)

是的,它被称为conditional expression

return None if x is None else something_else

你需要一个条件else something才能发挥作用。

答案 1 :(得分:46)

可以在一行上写一个标准的“if”语句:

if x is None: return None

pep 8 style guide建议不要这样做:

  

通常不鼓励使用复合语句(同一行上的多个语句)

答案 2 :(得分:5)

免责声明:实际上不要这样做。如果你真的想要一个单行,那么就像裸体狂热说的那样,只要打破PEP-8的经验法则。但是,它说明了return没有按照您的想法行事的原因,以及看起来像您认为return可能会表现的事情。

你不能说return None if x is None的原因是return引入了一个陈述,而不是一个表达。所以没有办法将它括起来(return None) if x is None else (pass)或其他什么。

没关系,我们可以解决这个问题。让我们编写一个函数ret,其行为类似return,除了它是一个表达式而不是一个完整的语句:

class ReturnValue(Exception):
    def __init__(self, value):
        Exception.__init__(self)
        self.value = value

def enable_ret(func):
    def decorated_func(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except ReturnValue as exc:
            return exc.value
    return decorated_func

def ret(value):
    raise ReturnValue(value)

@enable_ret
def testfunc(x):
    ret(None) if x is None else 0
    # in a real use-case there would be more code here
    # ...
    return 1

print testfunc(None)
print testfunc(1)

答案 3 :(得分:1)

您还可以尝试list[bool]表达式:

return [value, None][x == None]

现在,如果第二个括号的计算结果为true,则返回None,否则返回要返回的值