2016-06-07 47 views
6

Perché dobbiamo fare questo:Perché una variabile deve essere dichiarata una variabile globale prima che venga assegnata?

global x 
x = "Hello World!" 

Quando questo è più leggibile:

global x = "Hello World" 

perché è questo, c'è una ragione dietro?

+7

Python non ha altri modificatori di variabili, ma ha altre istruzioni; questo quindi semplifica la grammatica. Per quanto è più leggibile, è inevitabilmente una questione di opinione. – jonrsharpe

+0

Diventerebbe meno leggibile con più variabili. per esempio: 'global x =" Hello world ", y =" What's up world ", z =" Arrivederci mondo "' diventa un po 'pieno. – BradTheBrutalitist

+0

Non penso che otterrete una barra delle risposte definitiva che chiede a Guido o ad alcuni sviluppatori. –

risposta

1

L'obiettivo di Python è quello di essere il più leggibile possibile. Per raggiungere questo obiettivo, l'utente deve essere costretto a comportarsi in modo chiaro e definito, ad es. devi usare esattamente quattro spazi. E proprio così definisce che la parola chiave global è una semplice dichiarazione. Ciò significa:

Un'istruzione semplice è compresa all'interno di una singola riga logica. Simple Statements

E

Nota per i programmatori: il globale è una direttiva al parser. Si applica solo al codice analizzato contemporaneamente all'istruzione globale. The global statement

Se volete scrivere questo:

global x = 5 

Avreste due operazioni logiche:

  1. Interprete Utilizzare il x globali non un locale uno
  2. Assegna 5 a x

in una riga. Inoltre, sembrerebbe che lo global si applichi solo alla riga corrente e non all'intero blocco di codice.

TL; TR

È costringere l'utente a scrivere meglio essere letti codice, che viene spacco di operazioni logiche singoli.

+0

Falx, grazie per il tempo e lo sforzo che hai impiegato per rispondere alla mia domanda, ora ho una migliore comprensione, +1. –

-1

Mi piace pensare che si concentri chiaramente sul fatto che si stia utilizzando globalmente, una pratica discutibile nell'ingegneria del software. Python non si tratta certo di rappresentare una soluzione problematica nel modo più compatto. Poi dirai che dovremmo indentare solo uno spazio, o usare le schede! ;-)

+0

Holdenweb, grazie per il tempo e lo sforzo che hai impiegato per rispondere alla mia domanda, +1. –

+1

Con tutti i mezzi non esitate a segnarlo – holdenweb

0

Il document scrive che

nomi elencati in un comunicato global deve non essere utilizzato nello stesso blocco di codice testualmente precedente questa affermazione globale.

Dettaglio implementazione CPython: l'implementazione corrente non applica le ultime due restrizioni, ma i programmi non dovrebbero abusare di questa libertà, poiché le implementazioni future potrebbero applicarle o modificare in silenzio il significato del programma.

Per quanto riguarda la domanda di leggibilità, penso che la seconda sembra una dichiarazione C. Inoltre non è sintatticamente corretto

+0

Gdlmx, grazie per il tempo e lo sforzo che avete preso per rispondere alla mia domanda, +1. –