Python中if语句中元组变量的作用域

Python中if语句中元组变量的作用域,python,if-statement,scope,tuples,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:赋值之前引用的局部变量“foo” 在其他编程语言中,可以在语句外初始化变量,但是这种情况如何 重要:我需要使用元组,而不是列表 更新:我不需要大小写x==y,因此我更改了代

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

我有以下代码:

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

(tmp1, tmp2) = foo
但是python返回:
UnboundLocalError:赋值之前引用的局部变量“foo”

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

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

更新:我不需要大小写
x==y
,因此我更改了代码,添加了进一步的条件:

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

if foo != None:
    (tmp1, tmp2) = foo
更新2:或者类似地:

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

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

在一行中,假设您忘记了代码中的大小写
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的回答编辑)

在一行中,假设您在代码中忘记了大小写
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的回答之后编辑)

这应该行得通,但尝试在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

这应该可以工作,但请尝试在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

Python没有块作用域。元组和列表函数在这里是不相关的,选择使用哪种类型也是不相关的


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

Python没有块作用域。元组和列表函数在这里是不相关的,选择使用哪种类型也是不相关的


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

是的,我知道,但我不需要这个条件。无论如何,我已经解决了添加一个更进一步的条件:
if-edge!=无:…
。谢谢。是的,我知道,但我不需要那个条件。无论如何,我已经解决了添加一个更进一步的条件:
if-edge!=无:…
。非常感谢。