2016-03-07 6 views
5

Ich schrieb etwas Python-Code und wie üblich versuche ich, meine Funktionen klein zu machen und ihnen einen klaren Namen zu geben (obwohl manchmal ein wenig zu lang). Ich komme zu dem Punkt, wo es keine globalen Variablen gibt und alles, was eine Funktion braucht, wird an sie weitergegeben.Warum ist es nicht in Ordnung, wenn Variablen global sind, aber für Funktionen ok?

Aber ich dachte, in diesem Fall hat jede Funktion Zugriff auf jede andere Funktion. Warum nicht den Zugriff auf andere Funktionen einschränken, so wie wir den Zugriff auf andere Variablen einschränken?

Ich dachte daran, verschachtelte Funktionen zu verwenden, aber das bedeutet Schließungen und das ist noch schlimmer für meinen Zweck.

Ich habe auch über die Verwendung von Objekten nachgedacht und ich denke, das ist der Punkt von OOP, obwohl es in meinem Fall ein wenig zu viel Standard ist.

Hat jemand dieses Problem auf seine/ihre Meinung und was ist die Lösung.

+0

Es macht es fast unmöglich zu wissen, den Zustand einer Anwendung zu wissen und erhöht die Menge der Informationen, die Sie in Ihrem Kopf speichern müssen, um dies zu tun. –

Antwort

1

Für alle, die Ihren Code lesen, hilft die Gruppierung der Funktionen in Klassen, sie geistig zu kategorisieren. Die Verwendung des Parameters self hilft, auch die Variablen zu organisieren, indem sie in einer Klasse gruppiert werden.

Sie können ihren Zugriff mit einem single leading underscore am Anfang des Funktionsnamens begrenzen.

+0

Yup, ich denke das ist was ich hören wollte. Es geht nicht nur um Veränderbarkeit, sondern auch um die allgemeine Struktur des Codes. – nicusor

7

Es ist keine gute Idee, globale veränderbare Daten, z.B. Variablen. Die Wandlungsfähigkeit ist hier der Schlüssel. Sie können Konstanten und Funktionen nach Herzenslust haben.

Sobald Sie jedoch Funktionen schreiben, die auf einen global veränderbaren Zustand angewiesen sind, begrenzt dies die Wiederverwendbarkeit Ihrer Funktionen - sie sind immer an diesen einen gemeinsamen Zustand gebunden.

0

Es wird davon abgeraten, globale Variablen zu verwenden, da sie den Überblick über den Status des Programms erschweren. Wenn ich eine 1000-Zeilen-Datei und irgendwo in der Mitte einer Funktion, die ich sehe, some_well_named_flag = False debuggen werde, werde ich viel jagen müssen, um zu sehen, wie es sich sonst noch auf das Programm auswirkt.

Funktionen haben keinen Status. Die Stellen, an denen sie das Programm ändern können, sind mehr oder weniger auf die Parameter und den Rückgabewert beschränkt.

Wenn Sie immer noch besorgt sind, den Zugriff auf Funktionen zu steuern, gibt es andere Sprachen wie Java oder C++, die Ihnen dabei helfen können. Eine Konvention mit Python besteht darin, Funktionen, die nicht außerhalb der Klasse verwendet werden sollen, mit einem Unterstrich zu versehen und dann zu vertrauen, dass Personen sie nicht außerhalb der Klasse aufrufen.