2 つの方法を次に示します。1 つは変数 x を変更し、もう 1 つは変更しません。これがなぜなのか説明していただけますか?
x = [1,2,3,4]
def switch(a,b,x):
x[a], x[b] = x[b], x[a]
switch(0,1,x)
print(x)
[2,1,3,4]
def swatch(x):
x = [0,0,0,0]
swatch(x)
print(x)
[2,1,3,4]
2 つの方法を次に示します。1 つは変数 x を変更し、もう 1 つは変更しません。これがなぜなのか説明していただけますか?
x = [1,2,3,4]
def switch(a,b,x):
x[a], x[b] = x[b], x[a]
switch(0,1,x)
print(x)
[2,1,3,4]
def swatch(x):
x = [0,0,0,0]
swatch(x)
print(x)
[2,1,3,4]
関数定義
def swatch(x):
ローカル変数であると定義x
します。
x = [0, 0, 0, 0]
ローカル変数x
を新しいリストに再割り当てします。x
これは、同じ名前のグローバル変数には影響しません。
x
の引数から削除できますswatch
:
def swatch():
x = [0, 0, 0, 0]
しかし、Pythonが次のような関数定義内で代入に遭遇したとき
x = [0, 0, 0, 0]
Python はデフォルトでローカル変数x
を考慮します。これに値を割り当てても、グローバル変数.x
x
x
グローバル変数になりたいことを Python に伝えるには、次のglobal
宣言を使用する必要があります。
def swatch():
global x
x = [0,0,0,0]
swatch()
ただし、この場合、x
is mutableであるため、次のように定義できますswatch
。
def swatch(x):
x[:] = [0,0,0,0]
x
内部swatch
はローカル変数ですがswatch
、
swatch(x) # the global variable x
同じ名前のグローバル変数と同じリストを指します。
x[:] = ...
元のリストを指しているまま、 の内容を変更します。したがって、これはグローバル変数が指す値も変更します。x
x
x
def switch(a,b,x):
x[a], x[b] = x[b], x[a]
元のリストを指しているx
間に の内容が変更される別の例です。x
したがって、ローカルをx
変更すると、グローバルも変更さx
れます。