assegnazione della variabile globale Pythonesque

6

Sto progettando un linguaggio con la sintassi Pythonesque, inclusa la creazione casuale di variabili per assegnazione. Mi chiedo al momento esattamente come affrontare l'assegnazione alle variabili globali (e alle variabili oggetto / classe, dato che sto implementando le classi come ambiti). In Python stesso, per impostazione predefinita il tentativo creerà invece una variabile locale:

x = 1
def f():
    x = 2 # creates a local variable

ma puoi sovrascriverlo con una dichiarazione global :

x = 1
def f():
    global x
    x = 2 # updates the global variable

Sto per implementare un prefisso . per il riferimento a variabili in ambiti esterni (in qualche modo simile al prefisso :: in C ++, ma probabilmente salterò un ambito invece di tutto), in modo che possa essere scritto come:

x = 1
def f():
    .x = 2 # updates the global variable

Sarebbe meglio avere solo questo modo di fare le cose, o sarebbe più chiaro o più conveniente avere il meccanismo di dichiarare le variabili come globali nel modo in cui lo fa Python?

    
posta rwallace 12.05.2012 - 19:12
fonte

1 risposta

4

Python 3.x introduce la dichiarazione nonlocal , che è descritto dalla sua documentazione:

The nonlocal statement causes the listed identifiers to refer to previously bound variables in the nearest enclosing scope. This is important because the default behavior for binding is to search the local namespace first. The statement allows encapsulated code to rebind variables outside of the local scope besides the global (module) scope.

PEP 3104 fornisce ulteriori informazioni di base sulla motivazione alla base di questa funzionalità.

Considererei ciò una cosa insolita da fare, quindi non mi dispiace avere una dichiarazione esplicita che sto facendo qualcosa fuori dall'ordinario. Avere una notazione concisa a carattere singolo per questo non sarebbe utile per me.

    
risposta data 13.05.2012 - 01:35
fonte

Leggi altre domande sui tag