銀月の符号

Python 使い見習いの日記・雑記

値の入れ替え

今日、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

で値がきちんと入れ替えられるのがやっぱりうれしかったり。