2016-03-07 43 views
5

Stavo scrivendo del codice Python e, come al solito, cerco di ridimensionare le mie funzioni e dare loro un nome chiaro (anche se a volte un po 'troppo lungo). Arrivo al punto in cui non ci sono variabili globali e tutto ciò di cui una funzione ha bisogno è passato ad esso.Perché non va bene che le variabili siano globali ma va bene per le funzioni?

Ma ho pensato, in questo caso, che ogni funzione ha accesso a qualsiasi altra funzione. Perché non limitare il loro accesso ad altre funzioni proprio come limitiamo l'accesso ad altre variabili.

Stavo pensando di utilizzare funzioni annidate ma questo implica chiusure e questo è ancora peggio per il mio scopo.

Stavo pensando anche all'utilizzo di oggetti e penso che questo sia il punto di OOP, anche se nel mio caso sarà un po 'troppo standard.

Qualcuno ha avuto questo problema in testa e qual è la soluzione.

+0

Fa sì che lo stato di un'applicazione sia quasi impossibile da conoscere e aumenta la quantità di informazioni che devi memorizzare nella tua testa per farlo. –

risposta

1

Per consentire a tutti di leggere il codice, raggruppare le funzioni in classi aiuterà a classificarle mentalmente. L'uso del parametro classe self aiuta anche a organizzare le variabili raggruppandole in una classe.

È possibile limitare l'accesso con un single leading underscore all'inizio del nome della funzione.

+0

Sì, credo che questo è quello che volevo sentire. Non riguarda solo la mutabilità, ma anche la struttura generale del codice. – nicusor

7

Non è una buona idea avere dati globali mutabili, ad es. variabili. La mutevolezza è la chiave qui. Puoi avere costanti e funzioni per il tuo contenuto di cuori.

Ma non appena si scrivono funzioni che si basano su uno stato globalmente mutabile, limita la riusabilità delle proprie funzioni: sono sempre legate a quello stato condiviso.

0

Le variabili globali sono scoraggiate perché rendono difficile tenere traccia dello stato del programma. Se eseguo il debug di un file di 1.000 righe e da qualche parte nel mezzo di una funzione, vedo some_well_named_flag = False, dovrò fare un sacco di ricerche per vedere in che modo influisce su cos'altro nel programma.

Le funzioni non hanno stato. I luoghi in cui possono modificare il programma sono più o meno limitati ai parametri e al valore di ritorno.

Se sei ancora preoccupato di controllare l'accesso alle funzioni, ci sono altri linguaggi come Java o C++ che possono aiutarti a farlo. Una convenzione con Python consiste nel prefisso funzioni che non dovrebbero essere utilizzate al di fuori della classe con un carattere di sottolineatura, e quindi fidarsi delle persone di non chiamarle al di fuori della classe.