嗨我有这样的代码
a = 7
def Add(number):
number+=1
print(number)
Add(a)
print(a)
并打印
8
7
因为我知道必须更改它,因为函数每次都在python中遇到引用问题,我该如何解决呢?
答案 0 :(得分:0)
问题,虽然我不知道它是什么语言,但是你是按价值发送到add
函数number
,这意味着你在{{1}分配给它的值离开函数时不会停留
例如,因为我不知道它是什么语言,我将在c:
中向您展示如果你在c中做同样的事情:
number+=1
但是如果你发送一个指向整数的指针并改变指针中的值,那么值就会改变:
#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);
}
答案 1 :(得分:0)
Add
不会更改a
的值。 number
中的Add
是新的复制对象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