你能为返回的对象赋值吗?

时间:2017-06-07 16:50:56

标签: python variable-assignment

我正在尝试在Python3中实现Euclid的算法。 如果max(a,b)返回(a,b)中具有最大值的对象, 为什么你不能像这样操作那个对象:

max(a, b) %= min(a, b)

4 个答案:

答案 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将是最小值......