嗨,我有这样的代码
a = 7
def Add(number):
number+=1
print(number)
Add(a)
print(a)
它打印
8
7
据我所知,必须更改它,因为函数每次在 python 中都会引用什么问题,我该如何解决?
嗨,我有这样的代码
a = 7
def Add(number):
number+=1
print(number)
Add(a)
print(a)
它打印
8
7
据我所知,必须更改它,因为函数每次在 python 中都会引用什么问题,我该如何解决?
问题是,虽然我不知道它是什么语言,但您是按值发送给add
函数number
,这意味着当您离开函数时,您分配给它的值number+=1
不会保留
例如,因为我不知道它是什么语言,所以我会用 c 向你展示:
如果您在 c 中执行相同的操作:
#include <stdio.h>
#include <string.h>
void add(int a)
{
a += 1;
printf("%d\n", a);
}
main()
{
int a = 7;
add(a);
printf("%d\n", a);
}
但是如果您将发送一个指向整数的指针并更改指针中的值,则该值将被更改:
#include <stdio.h>
#include <string.h>
void add(int *a)
{
*a += 1;
printf("%d\n", *a);
}
main()
{
int a = 7;
add(&a);
printf("%d\n", a);
}
输出是
8
8
Add
不会改变 的值a
。number
inAdd
是一个新的复制对象a
。您可以在这里看到它们是不同的对象,使用id(object)
它返回对象标识号a
和nuumber
:
a = 7
def Add(number):
number+=1
print("'number' id => {0}".format(id(number)))
print(number)
print("'a' id => {0}".format(id(a)))
Add(a)
print("'a' id => {0}".format(id(a)))
print(a)
输出,标识符可能与您的不同:
'a' id => 19295200
'number' id => 19295188 <- different new object with different id
8
'a' id => 19295200
7
因此,您应用的任何更改number
都不会生效a
。Python 的做法是用新值重新分配对象:
a = 7
def Add(number):
number+=1
print(number)
return number
a = Add(a)
print(a)
输出:
8
8