6.3 Istruzioni di assegnamento

Le istruzioni di assegnamento vengono usate per (ri)legare nomi a valori e modificare attributi o elementi di oggetti mutabili:

assignment_stmt  ::=  (target_list "=")+ expression_list
target_list  ::=  target ("," target)* [","]
target  ::=  identifier
    | "(" target_list ")"
    | "[" target_list "]"
    | attributeref
    | subscription
    | slicing
Potete scaricare il file originale (in Inglese) come testo.

(Vedere la sezione 5.3 per la definizione della sintassi degli ultimi tre simboli.)

Un'istruzione di assegnamento valuta la lista delle espressioni (ricordando che questa può essere una singola espressione o una lista separata da virgole, l'ultima produce una tupla) e assegna ogni singolo oggetto risultante ad ognuno dei riferimenti forniti, da sinistra a destra.

L'assegnamento viene determinato ricorsivamente a seconda della forma del riferimento (lista). Quando un riferimento fa parte di un oggetto mutabile (un riferimento ad un attributo, una subscription o a fette), l'oggetto mutabile deve infine eseguire l'assegnamento e decidere la propria validità e può sollevare un'eccezione se l'assegnamento è inaccettabile. Le regole osservate dai vari tipi ed eccezioni sollevate vengono date con la definizione del tipo di oggetto (vedere la sezione 3.2).

L'assegnamento di un oggetto ad una lista di riferimenti viene definita ricorsivamente come segue.

L'assegnamento di un oggetto ad un singolo riferimento viene ricorsivamente definito come segue.

(Nell'implementazione corrente, la sintassi per gli identificativi diviene la stessa che per le espressioni e sintassi individuali vengono rifiutate durante la fase di generazione del codice, causando messaggi di errore dettagliati.)

AVVERTENZE: benché la definizione di assegnamento implichi che sovrapposizioni tra la parte sinistra e destra siano `innocue' (per esempio, "a, b = b, a" scambia le due variabili), sovrapposizioni all'interno della collezione di variabili assegnate non sono sicure! Per esempio, il seguente programma visualizza "[0, 2]":

x = [0, 1]
i = 0
i, x[i] = 1, 2
print x



Subsections
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.