是否可以从python中的单行方法返回
寻找类似的东西
return None if x is None
在上面尝试过,它是无效的语法
我很容易做到:
if x is None:
return None
但是好奇我是否可以将上面的if语句组合成一行
答案 0 :(得分:51)
是的,它被称为conditional expression:
return None if x is None else something_else
你需要一个条件else something
才能发挥作用。
答案 1 :(得分:46)
答案 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,否则返回要返回的值