如何在不使用 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
答案 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