Python中if语句中的元组变量的范围

时间:2014-06-14 09:47:19

标签: python if-statement scope tuples

如何在不使用 tuple()list()函数的情况下访问if / else语句中初始化的元组?

我有这段代码:

if x > y:
    foo = (a, b)
elif y > x:
    foo = (b, a)

(tmp1, tmp2) = foo

但是python返回:UnboundLocalError: local variable 'foo' referenced before assignment

在其他编程语言中,您可以在语句外部初始化变量,但是这种情况呢?

重要:我需要使用元组,而不是列表。

更新:我不需要案例x == y,因此我更改了我的代码,添加了更多条件:

foo = None
if x > y:
    foo = (a, b)
elif y > x:
    foo = (b, a)

if foo != None:
    (tmp1, tmp2) = foo

Update2 :或者,类似地:

if x > y:
    foo = (a, b)
elif y > x:
    foo = (b, a)
else:
    foo = ()

if len(foo) > 0:
    (tmp1, tmp2) = foo

3 个答案:

答案 0 :(得分:2)

Python没有块范围。而元组和列表函数在这里是无关紧要的,因为您选择使用哪种类型。

这里foo未定义的唯一原因是因为你忘记了一个条件:当x和y相等时。

答案 1 :(得分:1)

在一行中,假设您忘记了代码中的案例x == y

(tmp1, tmp2) = (a, b) if x > y else (b, a)

但是如果你想保留你的语法,就不要忘记==条件!

if x > y:
    foo = (a, b)
else:
    foo = (b, a)

(tmp1, tmp2) = foo

(在@Daniel Roseman回答之后编辑)

答案 2 :(得分:1)

这应该有效,但尝试在if-else块之前明确声明foo

x=3
y=2
a=1
b=2
foo=None #tell python foo must be reserved at this scope level
if x > y:
    foo = (a, b)
elif y > x:
    foo = (b, a)
elif y == x: #need to remember this case
    foo = (b, a)

(tmp1, tmp2) = foo