Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的x=[m]*n语法是什么?_Python_Terminology - Fatal编程技术网

Python中的x=[m]*n语法是什么?

Python中的x=[m]*n语法是什么?,python,terminology,Python,Terminology,我偶然发现了'x=[m]*n',并在解释器中运行它,我可以看到代码分配了一个用m初始化的n元素数组。但是我在网上找不到这种代码的描述。这叫什么 >>> x = [0]*7 >>> x [0, 0, 0, 0, 0, 0, 0] *只是一个乘法-因为列表的+是一个直观的东西,意味着连接两个操作数,下一步是用标量进行乘法-[0]*N意味着“将此列表与自身连接N次” 换句话说:*是Python中为其原始序列类型定义的运算符,是一个整数,用于将序列与自身连接多次。它

我偶然发现了'x=[m]*n',并在解释器中运行它,我可以看到代码分配了一个用m初始化的n元素数组。但是我在网上找不到这种代码的描述。这叫什么

>>> x = [0]*7
>>> x
[0, 0, 0, 0, 0, 0, 0]

*
只是一个乘法-因为列表的
+
是一个直观的东西,意味着连接两个操作数,下一步是用标量进行乘法-
[0]*N
意味着“将此列表与自身连接N次”

换句话说:
*
是Python中为其原始序列类型定义的运算符,是一个整数,用于将序列与自身连接多次。它可以处理列表、元组甚至字符串

这在Python中有点自然,因为该语言允许运算符重载——因此Python程序员确实希望运算符对对象执行有意义的操作

应该注意,组成结果列表的对象不是原始列表中对象的副本,而是对同一对象的引用。因此,如果原始列表的内容只是数字或其他一些不可变的对象,这并不奇怪——但如果它包含可变对象,例如内部列表,则在更改它们时可能会产生严重的副作用——如以下代码片段:

In [167]: a = [[0]] * 7

In [168]: a
Out[168]: [[0], [0], [0], [0], [0], [0], [0]]

In [169]: a[0].append(1)

In [170]: a
Out[170]: [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1]]

从中,在整数
n
和基元序列类型之间使用的乘法运算符
*
执行序列
n
次中项目的序列重复。所以我想你要找的术语是序列重复。请注意,这不是“序列复制”,因为没有创建项目的副本-您对同一序列有
n
引用

和字符串一起工作我希望我能接受两个答案。谢谢你们两位。Steve SJust我在这里写y答案时花时间学习的一个注意事项是:
*
实际上不是为任何序列定义的-它是为内置序列类型(列表元组、ste、字节、bytearray)定义的,但不是为
集合.abc.sequence
提供的混入功能,后者“事实上”定义了“序列协议”。(在Python2.x中,只是
collections.Sequence
)@jsbueno:这是因为
collections.abc.Sequence
不能假设你的构造函数会像标准序列那样接受一个iterable对象。集合也会出现同样的问题,但是省略所有的集合操作符会给你留下一个不太像集合的集合,所以他们咬紧牙关,用一种私有的方法进行假设第二部分是这个语法真正重要的地方。