Python 可以用if语句编写单行返回语句吗?

Python 可以用if语句编写单行返回语句吗?,python,Python,可以从python中的单行方法返回 在找这样的东西吗 return None if x is None 已在上面尝试,但它的语法无效 我很容易做到: if x is None: return None 但我想知道我是否可以将上面的if语句组合成一行是的,它被称为: 您需要一个条件中的其他东西,它才能工作。可以在一行上写一个标准的“if”语句: if x is None: return None 但是,委员会建议不要这样做: 通常不鼓励使用复合语句(同一行上有多个语句) 您也可以尝试

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

在找这样的东西吗

return None if x is None
已在上面尝试,但它的语法无效

我很容易做到:

if x is None:
    return None
但我想知道我是否可以将上面的if语句组合成一行是的,它被称为:


您需要一个条件中的
其他东西
,它才能工作。

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

if x is None: return None
但是,委员会建议不要这样做:

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


您也可以尝试使用
list[bool]
表达式:

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

现在,如果第二个括号的计算结果为true,则不返回任何值,否则将返回要返回的值。免责声明:不要实际执行此操作。如果你真的想要一句台词,就像NakedFananic说的,只要打破PEP-8的经验法则就行了。然而,它说明了为什么
return
的行为不像您所想的那样,以及一个事物会像您所想的
return
那样

如果x为None,则不能说
返回None,原因是
返回
引入了语句,而不是表达式。因此,如果x是None-other(pass)
,或者其他什么,就没有办法将其括起来
(返回None)

没关系,我们可以解决这个问题。让我们编写一个函数
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)

return x
有什么害处?@thefourtheye如果
x
不是None怎么办?OP没有提到关于else部分的任何内容。请注意,如果函数没有到达return语句,则会隐式返回None。如果这是函数中的最后一条语句,它相当于如果x是None-other-None
,则返回None,这是没有意义的。但是,如果x不是
None
,OP是否希望返回
False
。还记得在PEP 308之前,我们必须用数组模拟三元数吗<代码>返回[False,None][x为None]
?我也没有…我很确定函数在else情况下根本不应该返回。Python中的函数如果没有显式返回,则总是返回隐式None。澄清:在else情况下,函数不应该从该行返回;它应该继续执行。当三元表达式是可能的时候,这是愚蠢的。在它们存在之前这样做是有道理的,但现在绝对没有理由这样做。+1帮助我认识到,在三元表达式中只能使用
return
运算符一次<如果value==True,则code>返回“Yes”,否则else“No”
将在else语句中返回“No”。正如您所说,这绝对不是您应该做的事情,但我认为这至少有点聪明。@kqr:我喜欢将时尚的东西(函数装饰器)与非常不时尚的东西(非错误流控制除外)结合起来;-)但主要的一点是要说明
return
不是表达式,因此使用表达式退出函数的唯一方法是抛出一些东西。或者一个
产生
-表达式,但这并不普遍适用。这是一个相反的答案,类似于“不假”的答案。它解释了为什么一个人不应该做某事。谢谢你发布这篇文章,这是一篇很有创意的文章。我喜欢边喝早茶边读这本书,我谦恭地说“if EXPR:return”是允许的例外。原因是在调试时,“if EXPR:func()”(根据pep 8示例),不清楚是否调用了func()。但是,当调用“if EXPR:return”时,我们知道EXPR为true,因为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)