如何在Python中使用walrus运算符执行分配分解

时间:2019-12-07 12:40:49

标签: python python-3.x destructuring python-3.8

我可以按以下方式进行作业分解:

TCPROS

用于包含多个单词的字符串a, b = s.split(' ', 1)

我们如何在 s if 中进行相同的操作,使用Python 3.8中引入的最新赋值表达式(可能有多个目标)?

我尝试过:

elif

我收到以下错误:

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.

我想要这样做的原因是因为我不想在满足第一个条件的情况下不必要地分割字符串。

2 个答案:

答案 0 :(得分:2)

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

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.

答案 1 :(得分:0)

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

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

这将导致 SyntaxError: cannot use assignment expressions with tuple。这就是重点:目前海象运算符不允许拆包赋值。我也没有关于这是否计划用于未来的信息。 (也许甚至有一个合乎逻辑的原因,我无法弄清楚为什么这根本不可能。)鉴于他们剥离函数参数列表中的解包功能(从 Python2 移动到 Python3 时) ),我没想到。

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