Python 我应该怎么做而不是使用全局变量?

Python 我应该怎么做而不是使用全局变量?,python,Python,我正在用python制作一个简单的基于文本的rpg。由于它当前所在的位置,所有数据都在它自己的模块中,就像播放器对象和项目一样。我在一些地方读到,我不应该使用全局变量,但我不明白如何在没有全局变量的情况下将播放器和项目数据放入函数中?我应该使用非局部变量还是什么?我希望我在这里说得足够简洁。我将尝试为上下文提供一些示例代码 PlayerName = "Default" def choose_name(): PlayerName = input("What is your player'

我正在用python制作一个简单的基于文本的rpg。由于它当前所在的位置,所有数据都在它自己的模块中,就像播放器对象和项目一样。我在一些地方读到,我不应该使用全局变量,但我不明白如何在没有全局变量的情况下将播放器和项目数据放入函数中?我应该使用非局部变量还是什么?我希望我在这里说得足够简洁。我将尝试为上下文提供一些示例代码

PlayerName = "Default"

def choose_name():
    PlayerName = input("What is your player's name?")

def game_loop():
    choose_name()

game_loop()
我知道我没有在choose_name()函数中放入global。我对python还是新手,所以在我学习的过程中请耐心等待。

对于“配置”变量或常量的概念,这些变量或常量肯定是全局的

建议应改为“限制变量的范围”,不要过度使用
global
关键字

关于这个例子,让函数返回一些东西到游戏循环的局部范围

def choose_name():
    return input("What is your player's name?")

def game_loop():
    name = choose_name()
    print('Hello, {}!'.format(name)) 

game_loop()

游戏、玩家和物品显然看起来像是面向对象的类,所以你应该使用类来存储变量,而不是使用全局变量(如果你不想把它们作为函数参数传递的话)

职业游戏:
#使用静态变量
玩家=无
#或者为游戏类定义它:
定义初始化(自):
self.player=无
def game_loop():
self.player=player()
职业球员:
定义初始化(自):
self.name=输入(“您的玩家叫什么名字?”)
游戏
game.game_loop()

您可以在上阅读Python 3中关于OOP的更多内容

正如您已经认识到的,在大多数情况下,全局变量是个坏主意。那么使用类呢?我举一个例子:

class Game(object):
    def __init__(self, player_name="Default"):
        self.player_name = player_name

    def choose_name(self):
        self.player_name = input("What is your player's name?")

    def game_loop(self):
        self.choose_name()


Game().game_loop()

我希望我能帮忙。不要害怕问更多的问题

致以最诚挚的问候,

kruemelbacke

您是否了解函数参数?或者,类?将全局变量作为参数包含在函数中是否会改变其范围@cricket_007; it通过在局部作用域中生成同名变量来“隐藏”全局名称类是在多个函数之间共享和维护数据的一种方式,不必在函数之间显式传递数据。问题中没有明确定义上下文-只有一个游戏实例的一种方法是使用Singleton类:到目前为止,我无法向问题添加注释-我只能添加答案。但是,是的,我以前确实想过问。我只是根据现有的评论做出决定。