【发布时间】:2021-10-21 18:32:15
【问题描述】:
Python 工作,因此我可以在每次函数运行时更新 list:
list_obj = list()
def increase_list_obj(list_obj, n):
list_obj.append(n)
print(list_obj)
for n in range(3):
increase_list_obj(list_obj, n)
print(list_obj)
OUTPUT:
[]
[0]
[0, 1]
[0, 1, 2]
根据list 的持续存在方式,我希望我还可以在每次函数运行时更新int:
int_obj = 0
def increase_int_obj(int_obj):
int_obj += 1
print(int_obj)
for n in range(3):
increase_int_obj(int_obj)
print(int_obj)
OUTPUT:
0
0
0
0
EXPECTED:
0
1
2
3
为什么int 更新与list 更新的工作方式不同?
这两个对象的持久性和范围规则有何不同?
(我并不是要建议两者应该表现相同,我很好奇他们为什么不这样做)
要抢占有关如何更新 int 的答案:我意识到您可以通过从函数中返回 int 值来更新它:
int_obj = 0
def increase_int_obj_v2(int_obj):
int_obj += 1
return int_obj
print(int_obj)
for n in range(3):
int_obj = increase_int_obj_v2(int_obj)
print(int_obj)
OUTPUT:
0
1
2
3
谢谢!
【问题讨论】:
-
在列表的情况下,您正在修改名称所指的对象的内容,在整数的情况下,您正在更改名称所指的内容(分配不同的对象)
-
所有值位于一个空间中,独立于引用这些值的名称所在的任何范围。
-
我强烈推荐阅读这篇文章:nedbatchelder.com/text/names.html