2016-07-22 9 views
1

Ich habe ein Programm, das ich Millionen von Zeilen in Datenrahmen laden, und ich erkläre sie als global, so dass meine Funktionen (> 50) können sie alle wie ich eine Datenbank in der Vergangenheit verwenden. Ich habe gelesen, dass die Verwendung von Globals schlecht ist, und aufgrund der Speicherzuordnung dafür ist es langsamer, Globals zu verwenden.Globale Datenrahmen - gut oder schlecht

Ich frage gerne, ob Globals schlecht sind, wie wäre die gute Praxis? Passing> 10 Datenrahmen um Funktionen und verschachtelte Funktionen scheint auch nicht sehr sauber Code sein. Kürzlich wird das Programm unhandlich, da verschiedene Funktionen auch verschiedene Zellen aktualisieren, Daten aus den Datenrahmen einfügen, löschen, also denke ich daran, die Datenrahmen in eine Klasse zu verpacken, um sie überschaubarer zu machen. Ist das eine gute Idee?

+0

Es ist ein bisschen schwer, sehr gezielte Rückmeldung zu geben, ohne Ihren eigentlichen Code zu sehen. Sie könnten einige Ihrer Funktionen auf http://codereview.stackexchange.com/ veröffentlichen, um spezifischere Vorschläge zu erhalten. –

Antwort

2

Ja. Anstatt Globals zu verwenden, sollten Sie Ihre Daten in ein Objekt einfügen und dieses Objekt stattdessen an Ihre Funktionen übergeben (siehe Dependency-Injektion).

es in einem Objekt Wrapping stattdessen einen globalen Willen mit:

  1. Sie Lassen Sie Ihren Code zu Einheit testen. Dies ist absolut der wichtigste Grund. Durch die Verwendung von Globals wird es sehr schwierig, Ihren Code zu testen, da es aufgrund seiner globalen Natur unmöglich ist, Ihren Code isoliert zu testen.
  2. Führen Sie Operationen auf Ihrem Code sicher ohne die Angst vor zufälligen Veränderlichkeit Bugs
  3. Stop schreckliche Nebenläufigkeit Bugs, die passieren, weil alles global ist.
+0

Ja, ich stehe jetzt vor ihm. wie würdest du sie wickeln? jede Klasse für jeden Datenrahmen? schlagen Sie irgendeine Standardklassenstruktur vor, um Datenrahmen zu handhaben? – desmond

+0

Sie können einfach eine Superklasse namens "DataFrame" erstellen und jede Art von Datenrahmen davon erben lassen. Refactoriere einfach alle deine Globals in diese Klassen. Allerdings wird es den gesamten Code durchbrechen, da sie alle auf ein globales Wesen angewiesen sind, so dass es wahrscheinlich sehr zeitaufwendig ist, sie zu ändern. (Du wirst alles grundlegend ändern müssen.) –

+0

Danke, ich werde herausfinden, weißt du von einer URL, die mich dazu bringen kann, eine Struktur wie diese zu schreiben? es ist peinlich, aber mein ganzer Code ist nur Funktionen im Moment ... – desmond

Verwandte Themen