是可以从python中的单行方法返回
寻找这样的东西
return None if x is None
Run Code Online (Sandbox Code Playgroud)
试过上面,它是无效的语法
我很容易做到:
if x is None:
return None
Run Code Online (Sandbox Code Playgroud)
但只是好奇我是否可以将上面的if语句组合成一行
Ter*_*ryA 55
是的,它被称为条件表达式:
return None if x is None else something_else
Run Code Online (Sandbox Code Playgroud)
你需要else something一个有条件的工作.
nak*_*tic 52
可以在一行上写一个标准的"if"语句:
if x is None: return None
Run Code Online (Sandbox Code Playgroud)
但是,pep 8风格指南建议不要这样做:
通常不鼓励使用复合语句(同一行上的多个语句)
您也可以尝试以下list[bool]表达式:
return [value, None][x == None]
Run Code Online (Sandbox Code Playgroud)
现在如果第二个括号计算结果为 true,则返回 None,否则返回您想要返回的值
免责声明:实际上不要这样做。如果您真的想要单线,那么就像裸心狂热者所说的,只要打破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)
Run Code Online (Sandbox Code Playgroud)