Frage

Für meine aktuellen Job Ich schreibe einige lang andauernde (man denke Stunden bis Tage) Skripte, die CPU-Kapazität der Datenverarbeitung zu tun. Der Programmablauf ist sehr einfach - es geht in die Hauptschleife, vervollständigt die Hauptschleife, spart Ausgabe und endet: Die Grundstruktur meiner Programme neigt wie so zu sein:

<import statements>
<constant declarations>

<misc function declarations>

def main():
   for blah in blahs():
      <lots of local variables>
      <lots of tightly coupled computation>

      for something in somethings():
          <lots more local variables>
          <lots more computation>

   <etc., etc.>

   <save results>

if __name__ == "__main__":
    main()

Dies wird schnell unhandlich, so dass ich es in etwas mehr überschaubar Refactoring will. Ich will das besser verwaltbar machen, ohne die Ausführungsgeschwindigkeit zu opfern.

Jedes Futter Code stützt sich auf eine große Anzahl von Variablen jedoch so Teile der Berechnung heraus Funktionen Refactoring würde sehr schnell Parameter Liste wachsen aus der Hand machen. Soll ich diese Art von Code in eine Python-Klasse setzen, und die lokalen Variablen in Klassenvariablen ändern? Es macht nicht viel Sinn machen tp mich gedanklich das Programm in eine Klasse zu machen, wie die Klasse würde nie wiederverwendet werden und nur eine Instanz jemals pro Instanz erstellt werden.

Was ist die beste Praxis Struktur für diese Art von Programm? Ich verwende Python, aber die Frage ist relativ sprachunabhängig, eine moderne objektorientierte Sprache Funktionen übernehmen.

War es hilfreich?

Lösung

Zunächst einmal, wenn Ihr Programm wird für Stunden / Tage laufen wird dann den Aufwand für die Umstellung auf mit Klassen / Methoden statt alles in einem riesigen Haupt setzen sind so gut wie nicht existent.

Zusätzlich Refactoring (auch wenn es viele Variablen beinhalten nicht vorbei) sollten Sie Geschwindigkeit auf lange Sicht zu verbessern. ein Anwendungsprofil ist sehr eingängig ist viel einfacher, weil man die langsamen Teile Pin-Point und optimieren es. Vielleicht eine neue Bibliothek zusammen das ist sehr zu für Ihre Berechnungen optimiert ... ein gut konzipiertes Programm lassen Sie es in und Test sofort anschließen. Oder vielleicht entscheiden Sie eine C-Modulerweiterung zu schreiben, um die Geschwindigkeit einer Teilmenge der Berechnungen zu verbessern, eine gut gestaltete Anwendung wird so einfach zu machen.

Es ist schwer, konkrete Ratschläge zu geben, ohne <lots of tightly coupled computation> und <lots more computation> zu sehen. Aber ich würde mit der sich jeder for Block beginnen, es eigene Methode ist und gehen von dort aus.

Andere Tipps

Nicht zu sauber, aber funktioniert gut in kleinen Projekten ...

Sie können mit Modulen beginnen, als ob sie Singleton Instanzen waren, und erstellen Sie nur echte Klassen, wenn Sie die Komplexität des Moduls fühlen oder die Berechnung rechtfertigt sie.

Wenn Sie das tun, würden Sie „Import-Modul“ und nicht „aus dem Modul Import stuff“ verwenden - es ist sauberer und werden besser funktionieren, wenn „Material“ neu zugewiesen werden kann. Außerdem ist es in den Google-Richtlinien empfohlen wird.

Mit einer Klasse (oder Klassen) können Sie Ihren Code zu organisieren. Die Einfachheit der Form (wie durch die Verwendung von Klasse Attribute und Methoden) ist wichtig, weil es hilft Ihnen, den Algorithmus zu sehen, und Sie können leichter Unit-Test helfen, die Teile.

IMO, diese Vorteile überwiegen bei weitem die geringen Verlust an Geschwindigkeit, die mit der Verwendung von OOP kommen kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top