こんにちは、私はこのようなコードを持っています
a = 7
def Add(number):
number+=1
print(number)
Add(a)
print(a)
そしてそれは印刷します
8
7
関数はpython whatsの問題で毎回参照されるため、変更する必要があることはわかっていますが、どうすれば解決できますか?
こんにちは、私はこのようなコードを持っています
a = 7
def Add(number):
number+=1
print(number)
Add(a)
print(a)
そしてそれは印刷します
8
7
関数はpython whatsの問題で毎回参照されるため、変更する必要があることはわかっていますが、どうすれば解決できますか?
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
問題は、どの言語かわかりませんが、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