在函数内分配变量
Assigning variables inside a function
这个问题可能很常见,每隔一分钟就会被问到,但我试图寻找答案,但找不到。很可能我没能很好地表达这个问题。
无论如何,我正在开发一个小型文字游戏,它有变量,为简单起见,我们假设 water = 100
。我有一个函数是 main
循环。假设代码看起来像这样:
water = 100
def main():
while True:
water -= 5
print(water)
main()
当然,当我运行这个程序时它告诉我变量在赋值之前被引用了。但是如果我在函数内部创建变量,那么在循环的每次迭代中它都会将变量重置为原来的 100。
那么我该如何进行这项工作呢?
谢谢!
使用关键字global
。在您的代码中,在循环之前在函数 global water
中声明,然后您的代码将正常工作。
如果您想在不使用全局变量的情况下编写代码,您也可以编写代码以使用 nonlocal
变量。但是,这可能会更加混乱并且不适合您正在尝试做的事情。 PatNowak 的回答鼓励您阅读 global
关键字。使用以下示例作为鼓励也阅读有关不完全是本地或全局的变量。
def create_functions():
water = 100
def first_function():
nonlocal water
for _ in range(10):
water -= 5
print(water)
def second_function(amount):
nonlocal water
water += amount
return first_function, second_function
main, add_water = create_functions()
main()
add_water(25)
main()
if I make the variable inside the function then with each iteration of the loop it will reset the variable to the original 100.
???
def main():
water = 100
while water > 0:
water -= 5
print(water)
main()
输出:
95
90
85
80
75
70
65
60
55
50
45
40
35
30
25
20
15
10
5
0
这个问题可能很常见,每隔一分钟就会被问到,但我试图寻找答案,但找不到。很可能我没能很好地表达这个问题。
无论如何,我正在开发一个小型文字游戏,它有变量,为简单起见,我们假设 water = 100
。我有一个函数是 main
循环。假设代码看起来像这样:
water = 100
def main():
while True:
water -= 5
print(water)
main()
当然,当我运行这个程序时它告诉我变量在赋值之前被引用了。但是如果我在函数内部创建变量,那么在循环的每次迭代中它都会将变量重置为原来的 100。
那么我该如何进行这项工作呢? 谢谢!
使用关键字global
。在您的代码中,在循环之前在函数 global water
中声明,然后您的代码将正常工作。
如果您想在不使用全局变量的情况下编写代码,您也可以编写代码以使用 nonlocal
变量。但是,这可能会更加混乱并且不适合您正在尝试做的事情。 PatNowak 的回答鼓励您阅读 global
关键字。使用以下示例作为鼓励也阅读有关不完全是本地或全局的变量。
def create_functions():
water = 100
def first_function():
nonlocal water
for _ in range(10):
water -= 5
print(water)
def second_function(amount):
nonlocal water
water += amount
return first_function, second_function
main, add_water = create_functions()
main()
add_water(25)
main()
if I make the variable inside the function then with each iteration of the loop it will reset the variable to the original 100.
???
def main():
water = 100
while water > 0:
water -= 5
print(water)
main()
输出:
95
90
85
80
75
70
65
60
55
50
45
40
35
30
25
20
15
10
5
0