如何在方法参数中引用而不是值python

时间:2013-08-28 11:06:23

标签: reference

嗨我有这样的代码

a = 7

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

Add(a) 
print(a)

并打印

8
7

因为我知道必须更改它,因为函数每次都在python中遇到引用问题,我该如何解决呢?

2 个答案:

答案 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)返回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