我正在尝试在Python3中实现Euclid的算法。 如果max(a,b)返回(a,b)中具有最大值的对象, 为什么你不能像这样操作那个对象:
max(a, b) %= min(a, b)
答案 0 :(得分:1)
>>> a = 5
>>> b = 6
>>> max(a, b) %= min(a, b)
File "<stdin>", line 1
SyntaxError: can't assign to function call
口译员已经说过了。您正在尝试对值/对象进行操作,这是不可能的。可以仅对变量执行赋值,这些变量是指向所述值/对象的引用。
即使你能做到这一点,也没有意义,因为你试图改变一个函数的返回值,而这个值并没有被任何变量捕获。你甚至无法使用它。
答案 1 :(得分:1)
我相信你问题的简短答案是不。函数max(a,b)返回最大值,而不是最大值的变量引用。
我相信你要找的是:
if max(a,b) == a:
a %= min(a,b)
else
b %= min(a,b)
将检查最大值是否确实是赋值之前的变量a。
答案 2 :(得分:0)
您只能分配给变量,但函数无法返回变量。 (它只能返回一个值。)
例如:
a = 4
b = 5
max(a, b) # What does this return?
max(a, b)
返回值 5
,而不是变量 b
。 (因此,您尝试编写的代码基本上是5 = ...
,这没什么意义。)
答案 3 :(得分:0)
你不能这样做,函数max
返回一个值,而不是变量,你可以做什么,但是要执行:
a,b = sorted((a,b))
然后,在此行之后,a
将始终为更大的值(或等于b
)
这样你就可以在以下行中完成:
a%=b
因为b将是最小值......