
- 1 : 2025/02/06(木) 23:31:08.068 ID:sWBnO0gPa
- x, y = y, x = 0, 1
print(x, y)するとxに1、yに0が入ってるのなんで?
Pythonなんだけど - 3 : 2025/02/06(木) 23:33:47.143 ID:nu2JoySA0
- 上書きしてるからだろ
- 4 : 2025/02/06(木) 23:36:02.724 ID:2Dl8lPxy0
- 仕様考えりゃ分かるだろ
まずy,x=0,1が評価
次にx,y=y,xが評価 - 6 : 2025/02/06(木) 23:38:27.250 ID:sWBnO0gPa
- >>4
最初でyに0でxに1が入るじゃん?
次でxyがスワップされるからxに0でyに1にならないの? - 5 : 2025/02/06(木) 23:36:54.886 ID:sWBnO0gPa
- x, y = y, x = 0, 1
ってさ、右から評価するわけじゃん?
するとさ、y, x = 0, 1
x, y = y, xっていう処理がされてるのと同じはずじゃん?
後者だとxは0でyは1になるじゃん?
じゃあなんで前者は逆なのよ? - 7 : 2025/02/06(木) 23:39:09.115 ID:OIHKpe7g0
- パッと見たらx = 1とy = 0で合ってるような気がするよな
- 8 : 2025/02/06(木) 23:39:27.731 ID:sLXfI0RR0
- 2行に分けて処理さしたらどうなんの?
- 11 : 2025/02/06(木) 23:43:43.881 ID:sWBnO0gPa
- >>8
それが2行に分けたらxが0、yが1になんのよy, x = 0, 1
x, y = y, x
print(x, y)はxが0, yが1なのよ
- 9 : 2025/02/06(木) 23:40:07.170 ID:sWBnO0gPa
- マジで納得できない…
Geminiに問いただしたら答えを訂正しやがったんだけど、コードを実行するとやっぱり違ってる
誰か教えてくれぇ - 10 : 2025/02/06(木) 23:43:17.847 ID:SpcyWb8h0
- ただの未定義動作
- 12 : 2025/02/06(木) 23:44:57.706 ID:sWBnO0gPa
- >>10
これなら喜んで納得して寝るわ - 13 : 2025/02/06(木) 23:45:53.680 ID:b8QPV5lW0
- pythonに未定義動作なんてあんの?
- 14 : 2025/02/06(木) 23:46:23.407 ID:Gy2QJ8770
- >>13
ないよ - 15 : 2025/02/06(木) 23:47:48.354 ID:sWBnO0gPa
- >>14
そうだよねえええええ
じゃあ何故なんだ - 17 : 2025/02/06(木) 23:48:50.915 ID:2Dl8lPxy0
- 並行代入機能で調べてみ
右の1がその左辺のxに入って、そのまま一番左辺のxにまで入ってるだけ - 19 : 2025/02/06(木) 23:52:19.827 ID:AfnHwUoY0
- ザクっと言うと
変数とかの位置関係ではなく右から評価します
あ。エックスは1なんだ!
じゃあ次もエックスは1だね! - 21 : 2025/02/06(木) 23:58:36.988 ID:sWBnO0gPa
- >>17
ごめんググってもそれらしいページ見つからない…>>18
つまり
a = b = c
みたいなものがあった時
a=c
b=c
って入ってくってことか?
「左から右に」の解釈に自信がない>>19
「じゃあ次もエックスは1だね!」←これが分からない… - 20 : 2025/02/06(木) 23:57:48.718 ID:kwioG4sT0
- 最初のイコールの評価はタプルを逆にしてるってことだよね
2回目はタプルに値を入れてる - 22 : 2025/02/07(金) 00:03:04.450 ID:XoW4tb+Ba
- x, y = y, x = 0, 1
print(x, y)y, x = 0, 1→ここではy = 1であることx = 1であることが一時的に記憶される
x, y = y, x→ここではその記憶された情報を引っ張ってくる。この引っ張ってくる時に位置は関係ない。例えば10個変数が並んで順番が全て滅茶苦茶だろうが、その前に記憶されたx = 1を持ってくる
どこにxがあろうがxは1である。 - 24 : 2025/02/07(金) 00:05:27.911 ID:JEV6naiV0
- >>22
それだと>>11の動作が説明できなくね? - 28 : 2025/02/07(金) 00:07:33.719 ID:sFY9lKPL0
- >>24
式と文の違いじゃないの?
あんま詳しくないけど - 23 : 2025/02/07(金) 00:03:45.199 ID:XoW4tb+Ba
- y, x = 0, 1→ここではy = 0であることx = 1であることが一時的に記憶される
だな - 29 : 2025/02/07(金) 00:11:27.357 ID:Yc5LhosF0
- そんなクソみたいな文を書かないで良いんじゃない
- 31 : 2025/02/07(金) 00:12:11.718 ID:JEV6naiV0
- マジで誰も分かんないの?
- 32 : 2025/02/07(金) 00:12:59.933 ID:vq1ciO/50
- タプル逆にしてる操作だって言ってるだろ
文法調べろ - 34 : 2025/02/07(金) 00:14:13.773 ID:gpjsvmuua
- Pythonでは変数の入れ替えがタプル(カンマで区切る)というものによって可能となっている
- 35 : 2025/02/07(金) 00:16:30.929 ID:43U1pduRM
- 原理も糞も難しく考えすぎじゃね
最初にx=1だと記憶れされたんだからどの位置にあろうがx=1ってだけでしょ - 36 : 2025/02/07(金) 00:18:05.020 ID:4M6dgg5Na
- >>35
x, y = y, x は一切評価されないってこと? - 37 : 2025/02/07(金) 00:19:44.823 ID:dT5/jgufa
- >>36
評価はしてるよ
それがあるから記憶されてるx=1って情報を持ってきてる - 38 : 2025/02/07(金) 00:21:56.746 ID:4M6dgg5Na
- >>37
評価してるなら
x, y = y, x は、y, x = 0, 1によってyは0,xは1が記録されてるわけだから、x, y = 0, 1 って処理されるんでないの?
- 39 : 2025/02/07(金) 00:24:32.508 ID:v9IACksBa
- いやいや…上でもずっと言われてるけど
xは1が記録されてる訳だからxは1
これはこういうものだしこういう仕組み
その仕組みがおかしいというならもう開発者にクレームでも入れるしかない
そういう仕組み - 40 : 2025/02/07(金) 00:27:20.728 ID:sFY9lKPL0
- 調べたらマルチターゲット代入の場合は、一番右辺の値がそれより左の変数に直接代入されるらしい
だから真ん中がスッポ抜けてこうなるとURL貼れなかったけど
Pythonのマルチターゲット代入の評価順序
って記事読んだ - 42 : 2025/02/07(金) 00:29:26.594 ID:5eXxMzSha
- listとか使ってると思った方が良いんじゃね
listの中にx=1,y=0であるという情報を格納したんだ
そしてそのlistからxとyの情報を持ってきた
実際にはlistじゃなくタプルによって似たような動作になってるだけ


コメント