Python:没有类的模块中的持久变量?

fdm*_*ion 0 python module

编辑:这是我尝试失败的实际代码:

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中的函数依赖于代码段中保留的数据.

Mar*_*cin 5

对的,这是可能的.你刚刚做到了

-

重新更新:这是一个完全不同的问题,显示完全不同的代码.

您的代码的问题是您有两个不同的变量:

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)