2024-05-14 03:23:22 发布
网友
这是一个将矩阵顺时针旋转90度的问题,我不明白为什么我不能使用:
matrix = zip(*matrix[::-1])
但是:
在Python中,所有赋值都将引用绑定到一个名称。运算符调用现有引用的方法1。在你的情况下,陈述
matrix = ...
纯粹是一项任务2。它计算右侧,并将其绑定到局部函数作用域中的名称matrix。传入时引用的任何对象matrix都保持不变。在
matrix
这就是为什么你看不到你所做的改变。并不是函数不能这样工作,而是它对旋转的列表没有任何作用。一旦函数退出,数据就会被丢弃。在
手术
另一方面,尽管有=符号3,但在语义上是一个赋值。这是对matrix.__setitem__(...)4的调用。与任何其他方法一样,__setitem__方法直接对对象进行操作,而不更改其名称绑定。在
=
matrix.__setitem__(...)
__setitem__
就索引而言,[:]相当于[::]。它们分别是[0:len(matrix)]和{}的简写。在这两种情况下,将使用默认步长。一般来说,任何包含冒号的索引都将转换为^{}对象。缺少的元素被设置为None,并由此处显示的特定于序列的默认值替换。在
[:]
[::]
[0:len(matrix)]
None
1一些运算符,如+=在调用方法后执行赋值。它们被称为augmented assignments。但这不是我们现在感兴趣的案子。在
+=
2除了文字assignment statements(=),其他一些类型的赋值是def(它将函数对象绑定到它的名称)、class(对类对象也一样)、import(将模块或模块的元素绑定到名称),将参数传递给函数(将对象绑定到本地参数名或kwarg字典键)和for(在每次迭代时将迭代器中的元素绑定到循环变量)。在
def
class
import
for
3从解析器的角度来看,它仍然是一个assignment,但语句的处理方式完全不同。一个实际上不是赋值的类似语句在实现为描述符的属性上使用=运算符,例如property。在
property
4从技术上讲,它更像是type(matrix).__setitem__(matrix, ...),但是有一些额外的优化。例如,type(matrix)的元类永远不会被搜索。在
type(matrix).__setitem__(matrix, ...)
type(matrix)
方法中的matrix是对矩阵对象的引用。对matrix的赋值将更改matrix以引用新创建的对象,但不会更改原始对象的内容。matrix[::] =对matrix引用的对象调用__setitem__,从而相应地更改对象的内容。在
matrix[::] =
在Python中,所有赋值都将引用绑定到一个名称。运算符调用现有引用的方法1。在你的情况下,陈述
纯粹是一项任务2。它计算右侧,并将其绑定到局部函数作用域中的名称
matrix
。传入时引用的任何对象matrix
都保持不变。在这就是为什么你看不到你所做的改变。并不是函数不能这样工作,而是它对旋转的列表没有任何作用。一旦函数退出,数据就会被丢弃。在
手术
^{pr2}$另一方面,尽管有
=
符号3,但在语义上是一个赋值。这是对matrix.__setitem__(...)
4的调用。与任何其他方法一样,__setitem__
方法直接对对象进行操作,而不更改其名称绑定。在就索引而言,}的简写。在这两种情况下,将使用默认步长。一般来说,任何包含冒号的索引都将转换为^{} 对象。缺少的元素被设置为
[:]
相当于[::]
。它们分别是[0:len(matrix)]
和{None
,并由此处显示的特定于序列的默认值替换。在1一些运算符,如
+=
在调用方法后执行赋值。它们被称为augmented assignments。但这不是我们现在感兴趣的案子。在2除了文字assignment statements(
=
),其他一些类型的赋值是def
(它将函数对象绑定到它的名称)、class
(对类对象也一样)、import
(将模块或模块的元素绑定到名称),将参数传递给函数(将对象绑定到本地参数名或kwarg字典键)和for
(在每次迭代时将迭代器中的元素绑定到循环变量)。在3从解析器的角度来看,它仍然是一个assignment,但语句的处理方式完全不同。一个实际上不是赋值的类似语句在实现为描述符的属性上使用
=
运算符,例如property
。在4从技术上讲,它更像是
type(matrix).__setitem__(matrix, ...)
,但是有一些额外的优化。例如,type(matrix)
的元类永远不会被搜索。在方法中的
matrix
是对矩阵对象的引用。对matrix
的赋值将更改matrix
以引用新创建的对象,但不会更改原始对象的内容。matrix[::] =
对matrix
引用的对象调用__setitem__
,从而相应地更改对象的内容。在相关问题 更多 >
编程相关推荐