Python,函数改变值

1 投票
2 回答
11441 浏览
提问于 2025-04-17 16:50

我在让这个系统正常工作时遇到了麻烦,我不太确定自己问的问题是否正确,但我想说说发生了什么,以及我希望发生什么。

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

def gainM():
     money + 2
     Stats()

if money == 1:
     gainM()

现在,当它要打印钱的时候,值仍然是1,尽管我已经把值加了2。(这段代码并不是我实际程序的复制,而是一个示例,用来说明发生了什么。)

2 个回答

2

你需要把新的值赋给money。可以这样做:

money = money + 2

或者用简写的方式:

money += 2

另外,如果这个变量是在你的函数外面定义的,你需要声明它为全局变量(这样就不会创建一个局部变量)

所以你最后会得到:

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

补充说明:我并不是说你应该使用全局变量。一般来说,全局变量不是个好主意(虽然在某些情况下可能有用)。不过,这个例子确实需要这样才能正常工作。不过,你可能更想要的是一个包含实例变量的类,这样这个类的方法可以修改这些变量。不过,考虑到你似乎还没有掌握这门语言的基础,建议你一步一步来,不用担心我之前句子里你不理解的词语 :)

6

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

撰写回答