0

こんにちは、私はこのようなコードを持っています

a = 7

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

Add(a) 
print(a)

そしてそれは印刷します

8
7

関数はpython whatsの問題で毎回参照されるため、変更する必要があることはわかっていますが、どうすれば解決できますか?

4

2 に答える 2

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 に答える
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 に答える