【问题标题】:Return output from function called from a function从函数调用的函数返回输出
【发布时间】:2014-03-11 22:52:49
【问题描述】:

我正在使用 Vizard (Python),并希望在每次更新时钟时运行一个事件。在 Vizard 中正确执行此操作的函数是 vizact.ontimer()。这个函数的使用手册可以在here找到。

我想调用的函数既有输入又有输出。我明白(根据vizact.ontimer() 功能手册)我可以指定函数的输入,如下所示:

vizact.ontimer(0,myFunction,inputs)

...inputs 是输入列表,myFunction 是我要运行的函数的名称。 0 仅表示该函数应在有机会时运行。

但是,我不知道如何捕获来自myFunction 的输出。我该怎么做呢?似乎vizact.ontimer() 函数返回的对象与myFunction 的输出没有相似之处。

【问题讨论】:

  • 您希望输出是什么?我猜vizact.ontimer 不会立即调用该函数,而是在将来的某个时候调用。所以还没有任何东西可以返回。
  • 我的函数返回几个整数。 vizact.ontimer() 定期调用函数,由第一个参数指定。因此,在我上面的示例中,函数 myFunction0 秒调用一次(即立即循环)。
  • 要清楚(不知道 vizard 的详细信息):执行 vizact.ontimer 可能不会立即运行该函数,它注册它以在将来的某个时间运行(可能是“尽快”)。所以它的返回值不会与函数相关,因为它还没有运行它。它将在下一个计时器滴答时运行该功能。所以,你不想依赖返回的结果;正如您的解决方案所建议的那样,您希望该函数能够修改可在其他地方使用的数据。
  • 非常感谢。这很有意义。我目前正在实施下面的解决方案,正如你所说的那样。它只是涉及一些非常丑陋的代码(为了更改变量,我必须将其附加到列表中,然后删除列表元素零)

标签: python vizard


【解决方案1】:

文档似乎指定了一种方法来做到这一点。您可以简单地通过 args 将列表传递给函数,并让函数将其所需的输出附加到该列表中。

示例:

>>> def a(x):
    x.append('0')


>>> b = [1,2,3]
>>> a(b)
>>> b
[1, 2, 3, '0']

【讨论】:

  • 谢谢@WeaselFox。我怎么能这样做?即使我将一个列表传递给 myFunction,如果不将它们返回给父级,任何更改肯定仍然会丢失?
  • 不。如果将列表传递给函数,则可以对其进行更改。我会为你添加一个例子
  • 谢谢@WeaselFox。这种解决方法似乎是可用的最佳解决方案,尽管相当笨拙。
猜你喜欢
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
  • 1970-01-01
相关资源
最近更新 更多