python*operator,使用默认值创建列表

ash*_*ash 0 python list python-3.x

以下如何工作?

>>> 3*[2]
>>> [2,2,2]
>>> [2]*3
>>> [2,2,2]
Run Code Online (Sandbox Code Playgroud)

我明白这*是位置扩展运算符.既然[2]是一个包含单个项目的列表,我看不出如何3*[2]扩展到任何有意义的东西,我期待一个SyntaxError,但事实并非如此.

我很难找到现有的答案,我找到的只是引用*args**kwargs传递可变参数列表,这些都没有完全回答我的问题.

Mar*_*ers 12

*乘法运算符.所有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]]
Run Code Online (Sandbox Code Playgroud)

只有一个嵌套[None]列表,引用了5次,而不是5个单独的列表对象.

*args**kw可变参数的语法仅在函数定义或在呼叫(以便有意义callable_object(<arguments>)).它根本不适用于此.请参阅**(双星)和*(星)对参数做什么?有关该语法的更多详细信息.

序列类型*通过object.__mul__()object.__rmul__() 方法(在表达式中作为左或右操作数)重载操作符,请参阅模拟容器类型以获取有关哪些挂钩序列类型通常实现的文档.

  • 你太快了:/每当我遇到一个问题你已经修复了代码语法并用完美的例子和文档链接回答了问题.哦,这是一种恭维,所以保持这么有用! (4认同)