Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何代替添加/更改全局变量_Python_Python 3.x - Fatal编程技术网

Python 如何代替添加/更改全局变量

Python 如何代替添加/更改全局变量,python,python-3.x,Python,Python 3.x,我对编程非常陌生,我到处都在读“使用方法更改全局变量不是很好的编码。使用很少的全局变量,绝对不要更改它们”。我似乎找不到一个很好的解释来解释为什么或者应该做什么 假设我想玩一个游戏。它具有变量health=100。现在我想这应该是一个全局变量,而不是在类/对象中,但这也意味着我需要通过如下操作来调整它: def minushealth(): global health health -= 20 我似乎真的无法理解这一点,也许这里有一些简单的事情我不知道。您可以将health作为

我对编程非常陌生,我到处都在读“使用方法更改全局变量不是很好的编码。使用很少的全局变量,绝对不要更改它们”。我似乎找不到一个很好的解释来解释为什么或者应该做什么

假设我想玩一个游戏。它具有变量
health=100
。现在我想这应该是一个全局变量,而不是在类/对象中,但这也意味着我需要通过如下操作来调整它:

def minushealth():
    global health
    health -= 20

我似乎真的无法理解这一点,也许这里有一些简单的事情我不知道。

您可以将
health
作为函数的显式参数并从函数返回值:

def minus_health(health):
   return health - 20
然后在调用时指定返回值:

health = minus_health(health)
更好的是,使用可选的第二个参数来摆脱“幻数”:

def minus_health(health, amount=20):
   return health - amount 
请注意,您现在可以测试
负健康状况
如下:

assert minus_health(100) == 80
然而,如果您使用
global
,则必须执行以下操作:

health = 100
minus_health()
assert health == 80

在这个简单的示例中,这似乎不是一个大问题,但随着程序变得越来越复杂,您需要进行更多的设置和拆卸,而一个隔离良好的函数仍然可以在一行中有效地进行测试。

您可以将
运行状况
作为函数的显式参数并从函数返回值:

def minus_health(health):
   return health - 20
然后在调用时指定返回值:

health = minus_health(health)
更好的是,使用可选的第二个参数来摆脱“幻数”:

def minus_health(health, amount=20):
   return health - amount 
请注意,您现在可以测试
负健康状况
如下:

assert minus_health(100) == 80
然而,如果您使用
global
,则必须执行以下操作:

health = 100
minus_health()
assert health == 80

在这个简单的示例中,这似乎不是一个大问题,但随着程序变得越来越复杂,您需要进行更多的设置和拆卸,而一个隔离良好的函数仍然可以在一行中有效地进行测试。

您可以将
运行状况
作为函数的显式参数并从函数返回值:

def minus_health(health):
   return health - 20
然后在调用时指定返回值:

health = minus_health(health)
更好的是,使用可选的第二个参数来摆脱“幻数”:

def minus_health(health, amount=20):
   return health - amount 
请注意,您现在可以测试
负健康状况
如下:

assert minus_health(100) == 80
然而,如果您使用
global
,则必须执行以下操作:

health = 100
minus_health()
assert health == 80

在这个简单的示例中,这似乎不是一个大问题,但随着程序变得越来越复杂,您需要进行更多的设置和拆卸,而一个隔离良好的函数仍然可以在一行中有效地进行测试。

您可以将
运行状况
作为函数的显式参数并从函数返回值:

def minus_health(health):
   return health - 20
然后在调用时指定返回值:

health = minus_health(health)
更好的是,使用可选的第二个参数来摆脱“幻数”:

def minus_health(health, amount=20):
   return health - amount 
请注意,您现在可以测试
负健康状况
如下:

assert minus_health(100) == 80
然而,如果您使用
global
,则必须执行以下操作:

health = 100
minus_health()
assert health == 80

在这个简单的例子中,这似乎不是一个大问题,但随着程序变得越来越复杂,您需要进行更多的设置和拆卸,而一个隔离良好的函数仍然可以在一行中有效地进行测试。

Jornsharpe的答案是正确的

但对于游戏类型的答案,最好使用类/属性解决方案,如下所示:

player_object.minus_health()
class Player(object):
    def __init__(self):
        __health = 100

    def minus_health(self):
        self.__health -= 20
负_健康状况会是什么样子:

player_object.minus_health()
class Player(object):
    def __init__(self):
        __health = 100

    def minus_health(self):
        self.__health -= 20

当然,如果健康度低于0等,这并没有考虑在内,但你应该知道。通过这种方式,所有“玩家”都可以拥有独立的健康属性。

jonrsharpe的答案是正确的

但对于游戏类型的答案,最好使用类/属性解决方案,如下所示:

player_object.minus_health()
class Player(object):
    def __init__(self):
        __health = 100

    def minus_health(self):
        self.__health -= 20
负_健康状况会是什么样子:

player_object.minus_health()
class Player(object):
    def __init__(self):
        __health = 100

    def minus_health(self):
        self.__health -= 20

当然,如果健康度低于0等,这并没有考虑在内,但你应该知道。通过这种方式,所有“玩家”都可以拥有独立的健康属性。

jonrsharpe的答案是正确的

但对于游戏类型的答案,最好使用类/属性解决方案,如下所示:

player_object.minus_health()
class Player(object):
    def __init__(self):
        __health = 100

    def minus_health(self):
        self.__health -= 20
负_健康状况会是什么样子:

player_object.minus_health()
class Player(object):
    def __init__(self):
        __health = 100

    def minus_health(self):
        self.__health -= 20

当然,如果健康度低于0等,这并没有考虑在内,但你应该知道。通过这种方式,所有“玩家”都可以拥有独立的健康属性。

jonrsharpe的答案是正确的

但对于游戏类型的答案,最好使用类/属性解决方案,如下所示:

player_object.minus_health()
class Player(object):
    def __init__(self):
        __health = 100

    def minus_health(self):
        self.__health -= 20
负_健康状况会是什么样子:

player_object.minus_health()
class Player(object):
    def __init__(self):
        __health = 100

    def minus_health(self):
        self.__health -= 20

当然,如果健康度低于0等,这并没有考虑在内,但你应该知道。这种方式允许所有“玩家”拥有单独的健康属性。

在另一个答案中显示的
Player
类可能就是您最终的结果,但只是对函数参数的解释,您只能修改可变参数。在指定的情况下,一种类似于
Player
类但更简单的方法是在
dict
中管理您的状态,然后将该dict传递到函数中以修改属性:

def minus_health(entity, amount=-20):
    entity['health']+=amount

# Use like so
player = dict(name='John', health=100)
minus_health(player)

list
s和
object
s也是可变的,它们的工作方式类似,即它们的内容可以在函数内部修改。

在另一个答案中显示的
Player
类可能就是您结束的地方,但只是对函数参数的解释,您只能修改可变的参数。在指定的情况下,一种类似于
Player
类但更简单的方法是在
dict
中管理您的状态,然后将该dict传递到函数中以修改属性:

def minus_health(entity, amount=-20):
    entity['health']+=amount

# Use like so
player = dict(name='John', health=100)
minus_health(player)

list
s和
object
s也是可变的,它们的工作方式类似,即它们的内容可以在函数内部修改。

在另一个答案中显示的
Player
类可能就是您结束的地方,但只是对函数参数的解释,您只能修改可变的参数。在您指定的情况下