如果这打开了一个集合:

>>> a = {1,2,3}
>>> (x, y, z) = a
>>> x
1
>>> y
2
>>> z
3

那么,为什么下面的问题没有解决呢?

>>> a = {1,2,3}
>>> match a:
...   case (p, q, r):
...     print(f'{p} {q} {r}')
...
>>>

我希望上面的代码会打印"1 2 3".

这与不匹配的类型无关,因为如果我们用列表[1,2,3]替换集合{1,2,3},即使我们用元组语法解包,它也能工作.

推荐答案

match语句序列模式比序列解包具有更严格的规则.序列解包将try 解包任何iterable,但需要specified个序列模式

以下情况之一:

  • 继承自collections.abc.Sequence的类
  • 已注册为collections.abc.Sequence的Python类
  • 具有Py_TPFLAGS_SEQUENCE位设置的内置类
  • 继承上述任何一项的类(包括父项注册中定义的类)

set不符合这些条件.

请注意,由于集合在语义上是无序的,因此如果您试图解包集合,就无法保证将哪些元素分配给哪些变量.你的(x, y, z) = a箱行李不安全.

Python相关问答推荐

处理带有间隙(空)的duckDB上的重复副本并有效填充它们

如何在类和classy-fastapi -fastapi- followup中使用FastAPI创建路由

Python,Fitting into a System of Equations

梯度下降:简化要素集的运行时间比原始要素集长

如何从数据库上传数据到html?

Django—cte给出:QuerySet对象没有属性with_cte''''

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

python sklearn ValueError:使用序列设置数组元素

Gunicorn无法启动Flask应用,因为无法将应用解析为属性名或函数调用.'"'' "

当单元测试失败时,是否有一个惯例会抛出许多类似的错误消息?

如果包含特定值,则筛选Groupby

查看pandas字符列是否在字符串列中

用fft计算指数复和代替求和来模拟衍射?

如何设置nan值为numpy数组多条件

如何获取包含`try`外部堆栈的`__traceback__`属性的异常

Regex用于匹配Python中逗号分隔的AWS区域

Stats.ttest_ind:提取df值

如何使用Polars从AWS S3读取镶木地板文件

用LAKEF划分实木地板AWS Wrangler

在Matplotlib中通过特定的Y值而不是 colored颜色 来改变alpha/opacity