come python aggiorna i riferimenti alle variabili

0

Per questo ciclo while below. È chiaro come v1, v2, v3 siano aggiornati ai nuovi oggetti dati basati sull'equazione. Ma non capisco come u1, u2, u3 conservi i valori originali di v1, v2, v3. Qualcuno può aiutarti a chiarire? Quindi u1 punta ai dati originali a cui fa riferimento v1 ma non il nuovo riferimento per v1.

def findModInverse(a,m):
    if gcd(a,m) != 1:
        return None
    u1,u2,u3 = 1,0,a
    v1,v2,v3 = 0,1,m

    while v3 != 0:
        q = u3 // v3
        v1,v2,v3,u1,u2,u3 = (u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3
    return u1 % m

    mod = findModInverse(7,26)
    
posta scopa 20.11.2014 - 18:02
fonte

1 risposta

3

Il lato destro di un compito è valutato primo .

Quindi, se ci sono più bersagli, il lato destro dovrebbe essere una sequenza e ogni elemento di quel risultato è assegnato da sinistra-destra ai bersagli.

Questo significa che per prima cosa ottieni una tupla con:

((u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3)

e quindi i risultati di tale espressione sono assegnati a v1 , v2 , v3 , u1 , u2 , u3 target da sinistra a destra.

Quindi, per prima cosa, vengono memorizzati i valori correnti di v1 , v2 e v3 , e questi 3 nomi sono solo rimbalzati ai loro nuovi valori dopo che tutte le espressioni del lato destro sono state valutate.

Vedi anche Come funziona lo swap dei membri nelle tuple Python (a, b) = (b, a) funzionano internamente?

    
risposta data 20.11.2014 - 18:07
fonte

Leggi altre domande sui tag