如果变量存在,如何返回变量

can*_*all 0 python

我有以下功能,但是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]使用列表理解之类的东西

dav*_*ull 7

当前的答案实际上并没有回答问题;他们只是建议显式定义变量。要仅在变量存在的情况下返回变量,应使用三元运算符:

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 ”。如果您先初始化该变量,那么这可能会被视为您在某些情况下不小心忘记设置该变量。


omr*_*don 5

在函数的开头定义数据,如果它是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)