これは私が(How can python function actually change the parameter rather than the formal parameter?訪問)に尋ねたこれと同様の質問です。私はリストを正式なパラメータに使用しています。リストは参照型なので、以前と同じように動作するはずです。 は、だからここに私のコードです:ここでは私は関数のパラメータとしてリストを使用し、関数は実際のパラメータの値を変更することはできませんが、仮パラメータのみを変更するのはなぜですか?
def twomerger(lx, ly):
if lx[0] == ly[0]:
lx[0] = ly[0]
ly[0] = 0
if lx[1] == ly[1]:
lx[1] = ly[1]
ly[1] = 0
if lx[2] == ly[2]:
lx[2] = ly[2]
ly[2] = 0
if lx[3] == ly[3]:
lx[3] = ly[3]
ly[3] = 0
row1 = [0, 2, 4, 4]
row2 = [2, 2, 4, 4]
twomerger(row1, row2)
print (row1)
print (row2)
print ("it's a new situation:")
print (row1)
print (row2)
は私が転送しよう[0、2、4、4]及び[2、2、4、4]に[0、4、8、8]および[ 2,0,0,0]である。 (同じ垂直方向の数字が加算されます)。私は2つのリストを渡した - row1とrow2私の関数twomerger
のパラメータに。私はrow1とrow2がリストなので、これらの参照は、この関数がrow1とrow2を変更することができるはずだと思った。しかし、それは私に結果を与える[0, 2, 4, 4]
と[2, 2, 4, 4]
これは、機能が動作しないことを意味します。だから私は再び混乱している。
関数に変数を直接変更させるのは、とにかく悪い習慣です。あなたはlxとlyを返す方が良いです。 – u8y7541
@ u8y7541のように、いったんそれが行われているリストを変更する関数には何も問題はありません。私はちょうどいくつかの要素を変更/変更するために2つの新しいリストを作成したくないでしょう。 –
同じ事を2回印刷するバグ/タイプミスですか?それらの間に "その新しい状況"という言葉がありますか?テストがうまくいくかどうかは変わりませんが、それは常に同じことを2回印刷することです - あなたは 'twomerger()'コールの前に最初のものを望みます。 – GreenAsJade