是否可以从 python 中的单行方法返回
寻找这样的东西
return None if x is None
上面试过了,语法无效
我可以很容易地做到:
if x is None:
return None
但只是好奇我是否可以将上面的 if 语句组合成一行
是否可以从 python 中的单行方法返回
寻找这样的东西
return None if x is None
上面试过了,语法无效
我可以很容易地做到:
if x is None:
return None
但只是好奇我是否可以将上面的 if 语句组合成一行
免责声明:实际上不要这样做。如果您真的想要单线,那么就像裸狂热者所说的,只需打破 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)
你也可以试试这个list[bool]
表达式:
return [value, None][x == None]
现在,如果第二个括号的计算结果为 true,则返回 None ,否则返回您要返回的值