0

我在 Maya 中使用 python,一个 3D 动画包。我很想运行一个定义(A),但在该定义中我想要另一个需要有效对象选择的定义(B)。脚本将继续运行,直到生成一个(在 def B 中),我想继续使用我的脚本(def A)从 def B 返回值。我如何告诉 def A 等到从定义B?

这么短的问题:如何让 python 等待接收到有效的返回值?

我希望这是有道理的,并提前感谢您的宝贵时间。

C

例子:

def commandA () :
   result = commandB()
   ### Wait for a value here ###
   if result == "OMG its a valid selection" :
      do_another_commandC()

def commandB () :
   # This command is kept running until a desired type of selection is made
   maya.mel.eval("scriptjob \"making a valid selection\" -type polygon")
   if selection == "polygon" :
      return "OMG its a valid selection"
   else :
      commandB()

我需要 ### 行中的一些东西让函数等到收到所需的返回,然后继续其余的。目前,该功能只是运行所有内容。

谢谢

4

2 回答 2

0

你可以只使用一个while循环:

def commandA () :
    result = ""
    while (result != "OMG its a valid selection")
       # perhaps put a 0.1s sleep in here
       result = commandB()
    do_another_command()

我注意到

selection在您的代码中实际上并没有被赋予一个值(至少在您给我们的代码中没有),它不应该是:

selection = maya.mel.eval("scriptjob \"making a valid selection\" -type polygon")


另外,您是否有理由递归调用 commandB ?这最终可能会使用不必要的资源,特别是如果有人反复做出错误的选择。这个怎么样?

def commandA () :
    result = ""
    while (result != "polygon")
       # perhaps put a 0.1s sleep in here (depending on the behavior of the maya command)
       result = commandB()
    do_another_command()

def commandB () :
   # This command retrieves the selection
   selection = maya.mel.eval("scriptjob \"making a valid selection\" -type polygon")
   return selection 
于 2012-06-22T06:24:49.237 回答
0

如果 commandB() 的范围仅限于 commandA() 您可以考虑使用闭包(什么是闭包?

或者只是嵌套的python函数(http://effbot.org/zone/closure.htm,http://www.devshed.com/c/a/Python/Nested-Functions-in-Python/

在代码的任何部分考虑“result = commandB()”语句,

解释器应该等到从 commandB() 返回某些内容并分配给结果,然后再继续执行下一行。

于 2012-06-22T06:42:17.873 回答