48

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

寻找这样的东西

return None if x is None

上面试过了,语法无效

我可以很容易地做到:

if x is None:
    return None

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

4

4 回答 4

75

是的,它被称为条件表达式

return None if x is None else something_else

你需要else something一个条件才能让它工作。

于 2013-09-07T04:50:56.983 回答
69

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

if x is None: return None

但是pep 8 风格指南建议不要这样做:

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

于 2013-09-07T04:58:18.143 回答
7

免责声明:实际上不要这样做。如果您真的想要单线,那么就像裸狂热者所说的,只需打破 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)
于 2013-09-07T08:26:35.403 回答
4

你也可以试试这个list[bool]表达式:

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

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

于 2013-09-07T05:52:54.950 回答