2016-08-26 8 views
1

私は "1024"をPythonの基本ライブラリを使ってコーディングしようとしています。このプロセスでは、リスト[0、2、4、4]を[0,2,8,0]にしようとします。ここに私のテストコードがあります。それは非常に簡単です。python関数は仮引数ではなく実際にパラメータをどのように変更できますか?

def merger(a, b): 
     if a == b: 
     a += b 
     b = 0 


    numlist = [0, 2, 4, 4] 
    merger(numlist[0], numlist[1]) 
    merger(numlist[1], numlist[2]) 
    merger(numlist[2], numlist[3]) 
    print (numlist) 

したがって、私はマージを実行しようとします。私は出力[0、2、8、0]を期待していました。しかしそれは私に[0、2、4、4]を与える。実際のパラメータではなく、関数のローカル変数を変更しただけなのかもしれません。しかし、これが起こりたいのであれば、私は何をすべきですか?どうも!

私は関数が何も返されず、パラメータとして渡された変数の値を変更したいと思っているのが一般的です。どうすれば達成できますか?

+0

グローバル変数を 'global a、b'で導入することができます。しかし、これは一般的に良い習慣とは考えられていません...通常、 'return'ステートメントを使って関数から値を取得する方が好きです。 – nostradamus

+0

@nostradamus:はい、グローバルの変更を避けるのは良いことですが、 'global'はOPのコードを助けません。 –

+0

ああ、面白いです。どうも! –

答えて

2

あなたは関数にリストとインデックスを渡すことができます。リストオブジェクトが参照によって渡されると、関数内で、リスト上のすべての変更は、関数呼び出しの後に有効なように

def merger(l, a, b): 
    if l[a] == l[b]: 
     l[a] += l[b] 
     l[b] = 0 

numlist = [0, 2, 4, 4] 
merger(numlist, 0, 1) 
merger(numlist, 1, 2) 
merger(numlist, 2, 3) 
print(numlist) 

+0

多くのことを学んだ!どうも! –

関連する問題