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
x.__iadd__
,则x += y
等同于x = x + y
,因此语法的含义取决于x
的类型,而不仅仅是 6 个字符的字符串x += y
。 - chepner