如何在 Python 中使用 walrus 运算符执行赋值解构



>我可以做一个赋值解构为:

a, b = s.split(' ', 1)

对于具有多个单词的字符串s

我们如何在 Python 3.8 中引入的最新赋值表达式中做同样的事情,比如说ifelif(是否可以有多个目标(?

我试过了:

if some_thing:
# some code.
elif (a, b := s.split(' ', 1)) and some_func(a) and some_func(b):
# some code probably using a and b as well.

我收到以下错误:

elif (a, b := s.split(' ', 1)) and some_func(a) and some_func(b):
NameError: name 'a' is not defined

我想要这样做的原因是,如果我的第一个条件得到满足,我不想不必要地拆分我的字符串。

如果您尝试在分配给元组周围使用括号,错误消息会更清晰,并告诉您有关问题的一些信息:

if ((a, b) := s.split(' ', 1)):
...

这将导致SyntaxError: cannot use assignment expressions with tuple。 这就是重点:目前海象操作员不允许解包分配。 我也没有关于这是否计划在未来的信息。 (也许甚至有一个合乎逻辑的原因,我无法弄清楚为什么这根本不可能。 鉴于他们剥离了函数参数列表中的解压缩功能(从 Python2 移动到 Python3 时(,我不会期望它。

因此,您在这里所能做的就是分配给单个变量并在以后对其进行索引的解决方法。

请参阅对重新分配给元组的问题的评论。不过,我绝不是专家。发布以下内容,因为它有效,我认为这对您来说可能足够好?基本上,将元组保存到一个变量中,该变量有效,然后您可以为其编制索引

if some_thing:
# some code.
elif (split := s.split(' ', 1)):
if some_func(split[0]) and some_func(split[1]):
# some code probably using a and b as well.

最新更新