【发布时间】:2014-04-17 10:23:48
【问题描述】:
如何覆盖解包语法*obj和**obj的结果?
例如,您能否以某种方式创建一个行为如下的对象thing:
>>> [*thing]
['a', 'b', 'c']
>>> [x for x in thing]
['d', 'e', 'f']
>>> {**thing}
{'hello world': 'I am a potato!!'}
注意: 通过 __iter__(“for x in thing”)的迭代从 *splat 解包返回不同的元素。
我查看了operator.mul 和operator.pow,但这些函数只涉及两个操作数的用法,例如a*b 和a**b,并且似乎与splat 操作无关。
【问题讨论】:
-
我 99% 肯定你不能......但很想在这里被证明是错误的(见 stackoverflow.com/questions/9722272/…)
-
您应该能够只实现可迭代或映射协议。不过,我在让映射正常工作时遇到了奇怪的问题。
标签: python iterable-unpacking splat double-splat