【发布时间】:2015-07-16 14:11:20
【问题描述】:
我正在编写一个程序,每次从一堆词干中对音乐进行不同的排序。我现在有了一个基本的 GUI,其中包含触发轨道重新排序、播放和弹跳的按钮。
因此,在执行时,程序会触发一次重新排序功能,并返回准备好播放的输出值。 这可以使用 play 函数播放,但是要在函数内接收输出,必须重新触发初始函数,这是不对的。
我不想每次用户想要重播曲目时都重新触发排序功能,我只需要访问初始返回数据。我无法将返回的数据分配到重新排序函数之外,因为它只会保存一次,并且只有第一个序列可以播放。
下面的代码示例是我所拥有的,它对我不起作用。
我需要的是一种在每次重新排序时保存变量并使其可供播放功能访问的方法。 Play 不应仅仅为了获取值而重新触发重新排序。
:::
Resequence():
blah blah, sequencing.
return output
播放():
output=Resequence() # the value shouldnt change on each play.
play(output)
:::
输出是来自 PyDub 的音频片段。我尝试将其保存在文本文件中,这显然不起作用。
请帮忙:(
【问题讨论】:
-
所以将
output设为全局并在分配之前检查它是否已经包含一个值(或者如果没有办法做到这一点 - 添加一个全局标志来指示它)。 -
您也许可以使用
pickle模块来保存输出。如果没有,也许pydub有一些工具可以保存和加载它。 -
请提供更多代码,以便为您提供具体答案。谢谢。
-
把你的代码放在一个类中,例如
class Player: ...并使output成为实例变量 (->self.output = ...)。通过try: ... except AttributeError: ...访问它。 -
在将其设为全局变量之前,请考虑Global Variables Are Bad。
标签: python function return pydub