- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
本段下方的所有内容均来自《实用 Maya 编程》一书。在倒数第二行中,作者说带有参数 t
的 print
语句隐式调用 str(t)
,我想知道为什么,同样在第二个代码块中,作者创建了 vect
并将其分配给值 xform.translate.get()
,难道他不能继续使用 t
也分配给了 xform.translate.get()
?
>>> xform.translate
Attribute(u'pSphere1.translate')
>>> t = xform.translate.get()
>>> print t
[0.0, 0.0, 0.0]
突出显示的球体变换的平移值似乎是一个列表。它不是。翻译值是 pymel.core.datatypes.Vector 的一个实例。有时我们需要更积极地内省(introspection)对象。我认为这是 PyMEL 犯错误的少数领域之一。调用 str(t) 会返回一个看起来像是来自列表的字符串,而不是看起来像是来自 Vector 的字符串。确保你有正确的类型。我花了几个小时来寻找我使用 Vector 而不是列表的错误,反之亦然。
>>> vect = xform.translate.get()
>>> lst = [0.0, 0.0, 0.0]
>>> str(vect)
'[0.0, 0.0, 0.0]'
>>> str(lst)
'[0.0, 0.0, 0.0]'
>>> print t, lst # The print implicitly calls str(t)
[0.0, 0.0, 0.0] [0.0, 0.0, 0.0]
最佳答案
那是因为 Python 的数据模型。根据docs :
object.__str__(self)
Called bystr(object)
and the built-in functionsformat()
andprint()
to compute the “informal” or nicely printable string representation of an object. The return value must be a string object.This method differs from
object.__repr__()
in that there is no expectation that__str__()
return a valid Python expression: a more convenient or concise representation can be used.The default implementation defined by the built-in type object calls
object.__repr__()
.
如您所见,Python 的 print(object)
在内部调用 object.__str__()
返回对象的字符串表示形式。调用 str(object)
也会返回 object.__str__()
。
由于这个事实,print(object)
和 str(object)
都会为您提供相同的视觉输出。
关于python - 为什么在打印向量时隐式调用 str(vector)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34117072/
我是一名优秀的程序员,十分优秀!