以下工作如何进行?
>>> 3*[2]
>>> [2,2,2]
>>> [2]*3
>>> [2,2,2]
我知道这*
是位置扩展运算符。由于[2]
是一个包含单个项目的列表,因此我看不到如何3*[2]
扩展到任何有意义的内容,我希望有一个SyntaxError
,但事实并非如此。
我在寻找现有答案时遇到了困难,我发现的全部内容只是对可变参数列表的引用*args
和**kwargs
传递,这些参数列表并不能完全回答我的问题。
*
是乘法运算符。所有Python序列均支持乘法。请参阅序列类型文档:
s * n
,n * s
ñ的浅拷贝小号级联
请注意,副本较浅;任何嵌套的可变类型也不会递归地复制。这可能会导致令人惊讶的结果:
>>> nested = [[None]] * 5
>>> nested
[[None], [None], [None], [None], [None]]
>>> nested[0].append(42)
>>> nested
[[None, 42], [None, 42], [None, 42], [None, 42], [None, 42]]
只有一个嵌套[None]
列表,被引用了5次,而不是5个单独的列表对象。
的*args
和**kw
可变参数的语法仅在函数定义或在呼叫(以便有意义callable_object(<arguments>)
)。它根本不适用于这里。请参阅**(双星)和*(星)对参数有何作用?有关该语法的更多详细信息。
序列类型*
通过object.__mul__()
和object.__rmul__()
方法使运算符超载(当在表达式中为左或右操作数时),请参阅仿真容器类型以获取有关通常实现钩子类型的文档。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句