经验丰富的R用户,相对较新的Python用户。在
如果一致认为这是设计师的意见/想法问题,将删除。在
我很好奇为什么shape是数组的属性和numpy模块中的函数,而不是数组对象的方法。换句话说
import numpy as np
a = np.array((1,2,3))
np.shape(a) ## call function
## (3,)
a.shape ## retrieve attribute
## (3,)
a.shape() ## pretend that it's a method
## Traceback (most recent call last):
## File "<stdin>", line 1, in <module>
## TypeError: 'tuple' object is not callable
很明显,proximally,为什么最后一种方法不起作用(因为a.shape
返回{(3,)()
),但我不理解这个设计——非常天真,我本以为shape方法是最具python风格的。在
正如阿鲁伊斯丹特所说,PEP 8说:
我认为实际操作中的惯例比这还要多。如果从对象中获得的只是静态数据,则不需要将其作为方法;它可以是属性。也就是说,如果一个对象附加了已计算和存储的数据,则可以将其存储为属性。方法更常用于检索所需数据时,每次检索时都需要进行某种实际计算。(属性允许“透明”计算,即使是在简单的属性访问上,因此
obj.attr
实际上运行一个函数来计算结果,但是在任何繁重的计算中使用它都会被认为是有点偷偷摸摸的。)当然,如果您需要传递参数以获取所需的数据,它必须是一个函数/方法(这就是np.shape
是一个函数的原因)。当然,这里存在意见分歧的余地,而且确实有一些库在它们作为属性和方法公开的内容上有所不同。在因此,由于
shape
是数组的一个简单的固定特性,所以它不需要是一个方法。在相关问题 更多 >
编程相关推荐