値の入れ替え
今日、PythonRecipe に書いた182:最大公約数と最小公倍数を求める より。最大公約数をユークリッドの互除法にて算出する関数、非再帰版。この最後の部分 x, y = y, x % y
が正しく動いてくれる幸せ。
def _gcd(x, y): u""" 最大公約数を求める。型チェック無し。 x, y が負の数の場合は正に変換してから計算する。 ユークリッドの互除法にて。 y が 0 ならば終了。最大公約数は x 。 x に y を代入。 y に x を y で割った余りを代入。繰り返し。 """ x = abs(x) y = abs(y) while y: x, y = y, x % y return x
LL 言語では当たり前の機能だけども、C や Java からプログラムに入った一人としては
x, y = y, x
で値がきちんと入れ替えられるのがやっぱりうれしかったり。