我正在创建一个函数来检查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 =吗?或者这仅在返回单个变量时才起作用。谢谢!
答案 0 :(得分:3)
我是否可以简单地调用xGreater(x,y)来改变x和y的值,而不是前面的x,y =?
我担心你不能,因为x
和y
是不可变的,并且按价值传递给xGreater()
。
可以在某些特殊情况下完成(例如,如果x
和y
是两个列表),但通常不会。
说实话,我会摆脱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