Python,函数改变值

时间:2013-02-23 01:21:09

标签: python

所以我无法让这个系统工作,我无法确定我是在问正确的问题,但这里发生了什么,我想要发生什么。

money = 1
def Stats():
     print
     print "money " + str(money)

def gainM():
     money + 2
     Stats()

if money == 1:
     gainM()

现在当打印钱时会发生什么,即使我在值上加2,该值仍为1。 (代码不是我实际程序的副本,而是一个显示正在发生的事情的示例。)

2 个答案:

答案 0 :(得分:5)

money + 2是无操作。实际上,您必须将money分配给新值

money = money + 2
# or
money += 2

但是你会发现你得到一个错误 - 你不能分配给函数范围之外的变量。您可以使用global关键字:

global money
money += 2

这将允许您更改函数中的money值。

但是,推荐的方法是将money作为参数传递:

def gainM(money):
    money += 2
    Stats()
    return money

if money == 1:
    money = gainM(money)

如果您使用的是第二个选项(您应该使用),则还需要更改Stats功能,以获得money参数。

def Stats(money):
     print
     print "money " + str(money)

否则该功能将打印1而不是3

另一个建议 - 使用字符串格式。

'money %d' % money  # the old way
'money {}'.format(money)  # the new and recommended way

现在您将money传递到Stats函数。

def gainM(money):
    money += 2
    Stats(money)
    return money

答案 1 :(得分:2)

您需要将新值分配给金钱。像这样:

money = money + 2

或简写形式:

money += 2

此外,如果变量在函数之外,则需要将其声明为全局变量(因此它不会创建局部变量)

所以你最终得到:

def gainM():
    global money
    money += 2
    Stats()

编辑:只是为了澄清,我不是说你应该使用全局变量。一般来说,它们是一个坏主意(虽然它们在某些情况下可能有用)。但是,这就是这个特定的例子需要工作的东西。但是,您可能需要的是一个具有该类方法修改的实例变量的类。但是,鉴于你似乎还没有掌握语言的基础知识,一次只做一步,不要担心我以前的句子中你不理解的任何单词:)