0

是否有任何类型的变量可以让我增加它的值,而不会覆盖记忆的值?例子:

def main():
var = 0

  inc = input("Want to increase your variable?")
    if inc == "yes":
      var = var + 1
      main()
      #restart the script from the top
    if inc == "no":
      exit()

当代码重新启动时,var 将返回其值“0”,而不会记住我们所做的“var = var + 1”位,是否有任何变量类型会自我更新以匹配脚本中所做的更改?

4

3 回答 3

1

如果您的意思var是在迭代中不保留 的值,这与您在 中使用递归有关main()。这是完全没有必要的,最好用迭代代替:

var = 0

while True:
   inc = input("Want to increase your variable?")
   if inc == "yes":
      var = var + 1
   else:
      break
   print(var)

如果您的意思是要在var整个脚本的调用中保留 的值,则可以使用pickle

import os, pickle

PERSIST_FILE = "persist.dat"
if os.path.exists(PERSIST_FILE):
   var = pickle.load(open(PERSIST_FILE, "rb"))
else:
   var = 0

while True:
   print(var)
   inc = input("Want to increase your variable?")
   if inc == "yes":
      var = var + 1
   else:
      break

pickle.dump(var, open(PERSIST_FILE, "wb"))
于 2013-01-21T21:57:26.893 回答
0

否 - 当您按预期更改变量时,变量的值将被更改,除非使用某些后缀增量,即使那样,该变量也仅保持其“旧”状态以用于该行的评估。

听起来您需要使用“临时”变量。虽然显示的代码并没有真正告诉我任何事情,tbh。

更新:

编辑你的问题......我认为你的意思是你想要一个函数之间的全局变量,它确实记住函数调用之间的状态。

这是如何制作和使用这些全局变量的一个很好的来源:

http://www.python-course.eu/global_vs_local_variables.php

双重更新:

您可能的意思是,即使您关闭程序,您也希望变量记住它的状态!在这种情况下pickle,用作另一个答案详细信息。

于 2013-01-21T21:54:57.197 回答
0

当您运行您的函数 main() 时,您将 var 重置为 0。注意它在函数内部的方式,因此函数内部的任何内容都将运行。

这里 var 不会每次都变为 0:

var = 0
def main(number):
    print number
    inc = raw_input("Want to increase your variable?") # Or input() if python 3.x
    if inc == "yes":
        number += 1
        return main(number)
    if inc == "no":
        return number

var = main(var)
print var

在这种情况下 var 是一个全局变量。它可以在整个代码中访问。

上面的代码,运行时:

python file.py
0
Want to increase your variable?yes
1
Want to increase your variable?yes
2
Want to increase your variable?no
2 #result of printing var at the end

我希望这能回答你的问题。如果您有任何其他问题,我会尝试回答它们;)。我对python有点新手。

于 2013-01-21T23:10:10.693 回答