1

我正在创建一个函数来检查 x 是否大于 y,如果不是,它会切换两个值并返回它们。

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 的值,而前面没有 x, y = 吗?或者这仅在返回单个变量时才有效。谢谢!

4

3 回答 3

3

我可以不简单地调用 xGreater(x, y) 来改变 x 和 y 的值,而前面没有 x, y = 吗?

恐怕你不能,因为xandy是不可变的,并且是xGreater()按值传递的。

它可以在一些特殊情况下完成(例如,如果xy是两个列表),但不是一般情况下。

老实说,我会摆脱xGreater()并只是进行交换gcd()

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

我个人觉得这样的代码更具可读性。

于 2013-03-16T21:54:23.833 回答
2

不,整数是不可变的。但是,您可以减少一个元组打包/解包的实例:

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 回答