2016-07-23 5 views
4

Ich versuche Euclids Algorithmus zu verstehen, um die größten gemeinsamen Teiler zu finden, und habe Schwierigkeiten mit diesem Code, speziell die multivariable Zuweisung.Werden mehrere Variablenzuordnungen gleichzeitig ausgeführt?

Ich nahm an, 'u' würde zuerst zugewiesen werden, dann v, aber es expliziter zu schreiben brach den Algorithmus.

u = v 
v = u % v 
+0

Sie benötigen eine temporäre Variable, um den Anfangswert von 'u' zu speichern: 't = u',' u = v', 'v = t% v'. – Stefan

Antwort

1

Wenn Sie schreiben dies:

u = v 
    v = u % v 

Ich denke, es ist nur so etwas wie dieses:

u = v 
    v = v % v # u == v, this will make v to be 0, so break it down 

Und ich werde versuchen, die mehrere variable Zuordnung Frage zu beantworten. Das ist mein Testcode:

a = 1 
    b = 2 
    a, b = 3, a # after this, a == 3, b == 1 

Sie können sehen, dass, es ist wie a, b = [3, a], werden Sie [3, a] Teil zuerst bewerten. Und hier kommt die Ripper analysieren:

[:program, 
    [[:massign, 
     [[:@ident, "a", [1, 0]], [:@ident, "b", [1, 2]]], 
     [:mrhs_new_from_args, 
     [[:@int, "3", [1, 4]]], 
     [:var_ref, [:@ident, "a", [1, 6]]]]]]] 

Sie werden sehen, dass :mrhs_new_from_args wird zuerst ausgewertet werden, wie oben schon gesagt.