脚本 > Python > 

MEL 与 Python 之间的重要差异

 
 
 

更改

runTimeCommand -command "sphere -name myName" mySphere;

在 Python 选项卡中

import maya.cmds as cmds 
cmds.mySphere() 

同样,可以使用以下语法创建 Python 运行时命令,并从 Python 中调用这些命令:

import maya.cmds as cmds 
def mySphere(): 	 
     cmds.sphere(name='myName') 
     cmds.runTimeCommand('MyBall', command='mySphere()') 
     cmds.MyBall() 

其他差异

返回和回显结果

存在两种方式,MEL 和 Python 在返回和回显结果方面会有差异。一个是与正确的脚本执行相关的,而另一个是表面问题。本节将讨论回显结果和返回结果,有时会混淆它们。

本节主要对熟悉 MEL 但不熟悉 Python 的人员有帮助。

返回结果

MEL 在执行脚本时会返回最后执行的语句的结果(如果有)。将值指定给变量和返回结果的过程调用的语句属于返回结果的语句类型。例如,以下代码块将有一个结果,MEL 会将该结果回显到脚本编辑器和命令行消息区域:

if ( $foo == 1 ) $bar = 42; else $bar = 7;

相比之下,在 Python 中指定值的语句不返回结果,尽管 Python 执行该指定。

使用 Python 的语法,只需引用一个变量即可返回其值。MEL 的语法不允许只是编写变量的名称作为一条完整的语句。

在 Python 中可以将上述 MEL 代码片段编写为以下内容。最后一行 (bar) 会返回结果。

if foo == 1: bar = 42 else bar = 7 bar

如果需要在一种语言的上下文中使用在另一种语言中计算的值,那么了解该差异是很重要的。例如,如果希望在 MEL 中使用 Python 值,只需执行以下命令:

$myMELvariable = python ("myPythonVariable");

反之,如果希望在 Python 中使用 MEL 变量,则需要执行类似以下的命令:

import maya.mel myPythonVariable = maya.mel.eval ('global $myMELvariable; $temp=$myMELvariable;' )

可以这样做是因为赋值语句会返回一个结果,该语句是脚本中传递到 eval 命令的最后一条语句。

在 Python 中只能访问全局范围的 MEL 变量。

回显结果

MEL 会回显由脚本的最后一条语句返回的结果(如果有),而不管脚本中有多少行。Python 仅回显单条语句的结果。