如何避免使用全局变量?

Ric*_*ard 2 python

经过20年的中断后重新开始编程.一直认为在python中使用全局变量是设计糟糕的标志,但无法找到更好的方法.

下面是一个小程序,利用全局变量'暂停'来确定音乐播放器的状态.该变量由几个函数使用.

没有利用全局变量有更好的方法吗?

# Global variable to access from multiple functions
paused = False


def play_music():

    global paused

    if not paused:

        try:
            mixer.music.load(filename)
            mixer.music.play()
            statusBar['text'] = 'Playing Music - ' + os.path.basename(filename)
        except:
            tkinter.messagebox.showerror('File not found',
                                         'Melody could not find the file.')
    else:
        mixer.music.unpause()
        paused = False
        statusBar['text'] = 'Playing Music - ' + os.path.basename(filename)


def stop_music():
    mixer.music.stop()
    statusBar['text'] = 'Music stopped'


def pause_music():

    global paused

    if not paused:
        mixer.music.pause()
        paused = True
        statusBar['text'] = 'Music paused'

    else:
        play_music()
Run Code Online (Sandbox Code Playgroud)

Ósc*_*pez 8

您可以将所有函数放在类中,并将"全局"变量作为属性.通过这种方式,您可以在方法之间共享它:

class Player(object):
    def __init__(self):
        self.paused = False
    def play_music(self):
        if not self.paused:
            # and so on
    def pause_music(self):
        if not self.paused:
            # etc.
Run Code Online (Sandbox Code Playgroud)

  • 对于单个实例?好吧,至少状态封装在类中,并具有清晰的作用域规则。全局变量的问题在于您无法控制在何处/谁将对其进行修改。而且,如果您需要多个实例,那么您已经很安全了。 (2认同)