为什么带括号和不带括号的打印都会给出__str __()和__repr __()

时间:2014-08-08 17:12:07

标签: python maya

我正在尝试使用Python在Autodesk的Maya(2015)中完成一些操纵任务。我遇到了一些我认为奇怪的事情:

for source, destination in SCENE.Left_BallFoot_orientConstraint.connections(c=1,p=1):
    print source, destination

提供以下输出,属性的__str__()

Left_BallFoot_orientConstraint.constraintRotateX Left_BallFoot.rotateX
Left_BallFoot_orientConstraint.constraintRotateY Left_BallFoot.rotateY
Left_BallFoot_orientConstraint.constraintRotateZ Left_BallFoot.rotateZ
Left_BallFoot_orientConstraint.constraintRotateOrder Left_BallFoot.rotateOrder
Left_BallFoot_orientConstraint.constraintParentInverseMatrix Left_BallFoot.parentInverseMatrix[0]
Left_BallFoot_orientConstraint.constraintJointOrient Left_BallFoot.jointOrient
Left_BallFoot_orientConstraint.target[0].targetRotate Left_Toe_Control.rotate
Left_BallFoot_orientConstraint.target[0].targetRotateOrder Left_Toe_Control.rotateOrder
Left_BallFoot_orientConstraint.target[0].targetParentMatrix Left_Toe_Control.parentMatrix[0]
Left_BallFoot_orientConstraint.target[0].targetJointOrient Left_Toe_Control.jointOrient
Left_BallFoot_orientConstraint.target[0].targetWeight Left_BallFoot_orientConstraint.Left_ToeControlW0
Left_BallFoot_orientConstraint.Left_ToeControlW0 Left_BallFoot_orientConstraint.target[0].targetWeight

但是围绕print语句的括号括起来:

for source, destination in SCENE.Left_BallFoot_orientConstraint.connections(c=1,p=1):
    print(source, destination)

结果输出为__repr__()返回值:

(Attribute(u'Left_BallFoot_orientConstraint.constraintRotateX'), Attribute(u'Left_BallFoot.rotateX'))
(Attribute(u'Left_BallFoot_orientConstraint.constraintRotateY'), Attribute(u'Left_BallFoot.rotateY'))
(Attribute(u'Left_BallFoot_orientConstraint.constraintRotateZ'), Attribute(u'Left_BallFoot.rotateZ'))
(Attribute(u'Left_BallFoot_orientConstraint.constraintRotateOrder'), Attribute(u'Left_BallFoot.rotateOrder'))
(Attribute(u'Left_BallFoot_orientConstraint.constraintParentInverseMatrix'), Attribute(u'Left_BallFoot.parentInverseMatrix[0]'))
(Attribute(u'Left_BallFoot_orientConstraint.constraintJointOrient'), Attribute(u'Left_BallFoot.jointOrient'))
(Attribute(u'Left_BallFoot_orientConstraint.target[0].targetRotate'), Attribute(u'Left_Toe_Control.rotate'))
(Attribute(u'Left_BallFoot_orientConstraint.target[0].targetRotateOrder'), Attribute(u'Left_Toe_Control.rotateOrder'))
(Attribute(u'Left_BallFoot_orientConstraint.target[0].targetParentMatrix'), Attribute(u'Left_Toe_Control.parentMatrix[0]'))
(Attribute(u'Left_BallFoot_orientConstraint.target[0].targetJointOrient'), Attribute(u'Left_Toe_Control.jointOrient'))
(Attribute(u'Left_BallFoot_orientConstraint.target[0].targetWeight'), Attribute(u'Left_BallFoot_orientConstraint.Left_ToeControlW0'))
(Attribute(u'Left_BallFoot_orientConstraint.Left_ToeControlW0'), Attribute(u'Left_BallFoot_orientConstraint.target[0].targetWeight'))

2 个答案:

答案 0 :(得分:3)

即使您正在进行函数调用,但事实并非如此。在python 2中,print是一个关键字。所以你的第二个例子是:

print (source, destination)

即。您正在打印元组。所以,你得到的实际上是str的{​​{1}},它显示了tuple的部分。

在python的最新版本中,您可以使用

在python 2中获取打印功能以实现兼容性
repr

然后这将完成你的预期(但你的第一个例子变得无效)。

答案 1 :(得分:3)

在这种情况下:

print source, destination

您正在使用两个参数调用printprint将在每个参数上调用__str__()并显示它。

第二种情况:

print(source, destination)

实际上解释为:

print (source, destination)

它将它转换为元组,并将其作为一个参数传递给print。在这种情况下,它会在元组上调用__str__(),它会在每个元素上调用__repr__()