Python - 实现函数

时间:2013-03-16 21:50:15

标签: python

我正在创建一个函数来检查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 =吗?或者这仅在返回单个变量时才起作用。谢谢!

3 个答案:

答案 0 :(得分:3)

  

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

我担心你不能,因为xy是不可变的,并且按价值传递给xGreater()

可以在某些特殊情况下完成(例如,如果xy是两个列表),但通常不会。

说实话,我会摆脱xGreater()而只是在gcd()中进行交换:

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

我个人认为代码更具可读性。

答案 1 :(得分:2)

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

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

答案 2 :(得分: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