在Python中是否有类似于Perl中的"want"的东西

4
在Perl中,有一种方法可以找出函数在调用时所处的上下文——无论是列表还是标量上下文,甚至是更细粒度。请参见wantarraywant模块
在Python中有类似的东西吗?
1个回答

5

Python没有像Perl那样的标量/数组区分。值仅与名称绑定,而不考虑值的类型。

我能想到的最接近的类比是

x += y

这个语句的解糖形式是x.__iadd__(y),所以方法__iadd__可以检查其参数y的类型。例如,虽然list.__iadd__没有这样做,但它在理论上可以被定义为允许像这样的操作。

x = []
x += 9  # x == [9]; append a non-iterable argument
x += [11, 12]  # x == [9, 11, 12]; extend with an iterable argument

有趣!我会更深入地研究这个解糖化的东西。它是否也适用于赋值操作? - simone
1
啊!我喜欢“desugared”这个术语。我得用一下! - quamrana
“Syntactic sugar” 指的是语法并非严格必要的,可以被替换(“去糖化”)而不会影响语义。例如,如果未定义 x.__iadd__,则 x += y 等同于 x = x + y,因此语法的含义取决于 x 的类型,而不仅仅是 6 个字符的字符串 x += y - chepner
我想说的是,我觉得我在这里使用了这个术语太宽泛了。 - chepner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接