Python中x.type和type(x)有什么区别?

3
请考虑以下这几行代码:
import theano.tensor as T 

x = T.dscalar('x')
y = T.dscalar('y')
z = x+y

并且,接着进行以下操作:
In [15]: type(x)
Out[15]: theano.tensor.var.TensorVariable

尽管如此,

In [16]: x.type
Out[16]: TensorType(float64, scalar)

为什么type(x)和x.type给出两种不同的信息?它们传达了哪些信息?

我还注意到在参考Theano教程时,

>>> type(x)
<class 'theano.tensor.basic.TensorVariable'>
>>> x.type
TensorType(float64, scalar)

为什么我的type(x)输出结果不同?这些差异是由版本特定的实现差异引起的吗?这个差异表示了什么?


1
type(x) 是 Python 的标准功能,而 x.type 则是类实现的实例属性。 - jonrsharpe
3个回答

8

type(x)是内置函数。

x.type是定义在对象中的属性。

它们是完全独立的,type(x)返回x对象的类型,而x.type则执行对象定义的操作。在这种情况下,它返回有关对象类型的一些信息。


5
"theano.tensor" 有一个属性 type,当你说的时候,你正在查看它。
x.type

这类似于许多numpy对象所携带的dtype属性(如果您熟悉该库)。
另一方面,type是一个Python函数,它查看您传递的对象的实际类型,对于type(x)确实是一个。
theano.tensor.var.TensorVariable

长话短说,您正在将属性与实际对象类型进行比较。

0

正如其他人所提到的,type(x)是Python的内置函数,用于返回对象的类型。它与Theano本身无关。这个内置函数可以应用于任何Python对象(Python中的所有东西都是对象)。例如:

  • type(1)int
  • type(True)bool
  • type(lambda x: x * x)function等。

有趣的是,你可以在type本身上调用type(包括type在内的所有东西都是对象)- type(type)type

顺便说一句,type(T.dscalar)TensorType(确切地说是theano.tensor.type.TensorType)。

x.type,正如其他人所提到的,是对象x的属性。它指向type(T.dscalar)x.type返回TensorType(float64, scalar) - 这不仅显示了T.dscalar的类型,还告诉您x是标量且为64位浮点数。

类型属性的其他示例:

>>> iv = T.ivector()
>>> iv.type
TensorType(int32, vector)    # iv is a vector of 32-bit ints
>>> fm = T.fmatrix()
>>> fm.type
TensorType(float32, matrix)   # fm is a matrix of 32-bit floats
>>> lt3 = T.ltensor3()
>>> lt3.type
TensorType(int64, 3D)    # lt3 is a 3D array of 64-bit ints

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接