Python,函数改变值

1 python

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

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

def gainM():
     money + 2
     Stats()

if money == 1:
     gainM()
Run Code Online (Sandbox Code Playgroud)

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

Vol*_*ity 6

money + 2是一个无操作.您实际上必须分配money一个新值

money = money + 2
# or
money += 2
Run Code Online (Sandbox Code Playgroud)

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

global money
money += 2
Run Code Online (Sandbox Code Playgroud)

这将允许您更改money函数内的值.

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

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

if money == 1:
    money = gainM(money)
Run Code Online (Sandbox Code Playgroud)

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

def Stats(money):
     print
     print "money " + str(money)
Run Code Online (Sandbox Code Playgroud)

否则该函数将打印1而不是3.

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

'money %d' % money  # the old way
'money {}'.format(money)  # the new and recommended way
Run Code Online (Sandbox Code Playgroud)

现在你money进入这个Stats功能.

def gainM(money):
    money += 2
    Stats(money)
    return money
Run Code Online (Sandbox Code Playgroud)