0

嗨,我有这样的代码

a = 7

def Add(number):
         number+=1
         print(number)

Add(a) 
print(a)

它打印

8
7

据我所知,必须更改它,因为函数每次在 python 中都会引用什么问题,我该如何解决?

4

2 回答 2

0

问题是,虽然我不知道它是什么语言,但您是按值发送给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
于 2013-08-28T11:13:47.593 回答
0

Add不会改变 的值anumberinAdd是一个新的复制对象a。您可以在这里看到它们是不同的对象,使用id(object)它返回对象标识号anuumber

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
于 2013-08-28T11:26:23.700 回答