编辑:这是我尝试失败的实际代码:
sounds.py
import audio
import time
localAudioPlayer = None
def Play(soundString, wait=True):
if (localAudioPlayer != None):
localAudioPlayer.stop()
localAudioPlayer = audio.stream("sound/%s.ogg" % soundString)
localAudioPlayer.play()
if (wait == True):
while (localAudioPlayer.playing == True):
time.sleep(0.1)
return
Run Code Online (Sandbox Code Playgroud)
"audio"是我写的一个完整的库(在带有init的文件夹中),允许音频播放.
这里的想法是,如果在声音已经播放的同时调用Play(),则应停止该声音.
我没有我的代码设置,我可以实例化audio.stream()对象,而无需播放实际文件,因此预先初始化它并不是一个好主意.
我尝试了与原始示例类似的代码(我设置stuffLocalVar = None然后在函数中测试它为None)并且它工作正常.所以这是特定代码的特定内容.
当我在Python控制台上"导入声音"并尝试直接执行Play()时,我得到了相同的回溯.
追溯:
>>> sounds2.Play("file.ogg")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "sounds2.py", line 7, in Play
if (localAudioPlayer != None):
UnboundLocalError: local variable 'localAudioPlayer' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
原版的
我不确定这个设置的正确术语,所以让我举个简短的例子:
mainApp.py:
import stuff
print stuff.do() # should print 16
stuff.stuffLocalVar = 8
print stuff.do() # should print 32
Run Code Online (Sandbox Code Playgroud)
stuff.py
stuffLocalVar = 4
def do():
return stuffLocalVar * 4
Run Code Online (Sandbox Code Playgroud)
这可能吗?我想这样做是因为stuff.py(这是为了强调问题的重点而大大简化)包含我不希望用户能够实例化多个类的代码.应用程序范围内只需要此代码的一个"实例".但stuff.py中的函数依赖于代码段中保留的数据.
对的,这是可能的.你刚刚做到了
-
重新更新:这是一个完全不同的问题,显示完全不同的代码.
您的代码的问题是您有两个不同的变量:
outervar = None # this is global
def foo():
if(outervar): #this refers to the local variable
outervar = "you fail it" # this creates a local variable
Run Code Online (Sandbox Code Playgroud)
你想要的是:
outervar = None # this is global
def foo():
global outervar # prevents creation of local variable called outervar
if(outervar):
outervar = "you win it" # this assigns to global variable
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2597 次 |
| 最近记录: |