我有以下功能,但是data当我运行时它会抛出错误,例如在分配之前访问过foo(-1)。我希望它返回None。我们可以从一个函数返回许多值,其中一个是有条件的。我不想在if elif构造中写返回。
def foo(x):
if x > 1:
data = range(0,10)
elif x < 0:
print 'not valid'
return 1, 2, 3, data or None
Run Code Online (Sandbox Code Playgroud)
除了在开始时定义数据,还有其他选择吗?像return 1, 2, 3, [data if data]使用列表理解之类的东西
当前的答案实际上并没有回答问题;他们只是建议显式定义变量。要仅在变量存在的情况下返回变量,应使用三元运算符:
a if condition else b
在这种情况下,您似乎可以使用:
def foo(x):
if x > 1:
data = range(0,10)
elif x < 0:
print 'not valid'
return 1, 2, 3, data if 'data' in locals() else None
Run Code Online (Sandbox Code Playgroud)
这样,将任何大于 1 的数字传递给 foo() 将返回元组:
(1, 2, 3, range(0, 10))
传递任何小于 1 的数字将返回元组:
(1, 2, 3, None)
我认为这种方法更好,因为它清楚地表明了你在做什么。你的意思是“返回这个东西,但如果它不存在,则返回 None ”。如果您先初始化该变量,那么这可能会被视为您在某些情况下不小心忘记设置该变量。
在函数的开头定义数据,如果它是None,则 return 语句将按预期返回None。
def foo(x):
data = None
if x > 1:
data = range(0,10)
elif x < 0:
print 'not valid'
return 1, 2, 3, data
Run Code Online (Sandbox Code Playgroud)