1

x が y より大きいことを確認する関数を作成しています。そうでない場合は、2 つの値を切り替えて返します。

def xGreater(x, y):
    if(y > x):
        x, y = y, x
    return x, y

私のクエリは、この関数を別の関数内で使用するための最良の方法です。現在のコードは次のとおりです。

def gcd(x, y):
    x , y = xGreater(x, y)
    r = x % y
    while(r != 0):
        x, y = y, r
        r = x % y
    return y

xGreater(x, y) を呼び出して x と y の値を変更することはできますか? または、これは単一の変数が返される場合にのみ機能しますか? ありがとう!

4

3 に答える 3

3

xGreater(x, y) を呼び出して x と y の値を変更することはできますか?

xとは不変であり、値によってy渡されるため、残念ながらできません。xGreater()

一部の特殊なケース (たとえば、xyが 2 つのリストの場合) では実行できますが、一般的には実行できません。

完全に正直に言うと、私は取り除きxGreater()、単にスワップを行いgcd()ます:

def gcd(x, y):
    if y > x:
        x, y = y, x
    r = x % y
    ...

個人的には、この方法の方がコードが読みやすいと思います。

于 2013-03-16T21:54:23.833 に答える
2

いいえ、整数は不変です。しかし、タプルのパッキング/アンパッキングのインスタンスを 1 つ減らすことができます。

def xGreater(x, y):
    return (y, x) if y > x else (x, y)
于 2013-03-16T21:56:19.483 に答える
0

NPE にはより良い解決策がありますが、私は退屈で、ちょっとしたハックを書きたかったのです。

def gcd(x,y):
    minVal = y ^((x ^ y) & -(x < y))

    if ( minVal == y ):
        y = x ^ y  # Swapping values without a intermediate variable
        y = y ^ y  # This is highly inefficient to use.
        x = x ^ y  # But still kinda cool.

   return x % y
于 2013-03-17T00:09:15.687 に答える