2016-06-21 10 views
-3

Ich schreibe ein Python-Modul, das mehrere verschiedene Aufgaben bewältigen kann. Diese Aufgaben haben bestimmte Stücke von Codes wie folgtwiederverwendbarer Code in einem einzelnen Modul

if __name__ == '__main__:' 
    task == sys.argv[1] 
    if task =='task1': 
     code block1 
     code block2 
     ... 
    if task == 'task2': 
     code block2 
     .... 
    if task == 'task3': 
     some code 
     code block1 
     ...... 

Was ist die beste Lösung ist nicht die Codeblöcke in jeder Aufgabenteilung, zu kopieren, ohne sie in Funktionen setzen, wie diese Codeblöcke viele lokale Variablen erzeugt.

update: Ich denke an etwas in Matlab, Platzierung abc.m Zeile in Ihrem Code mit dem Code in abc.m. Ich frage mich, ob es eine Möglichkeit gibt, den irgendwo im Modul gespeicherten Codeblock auszuführen, außer einer Funktion (ich bevorzuge es, alle meine Funktionen mit so wenig Nebeneffekten wie möglich zu halten)

+0

Warum ist es ein Problem, wenn die Funktionen viele lokale Variablen generieren? Meinst du, du brauchst die Variablen außerhalb des Funktionsumfangs? Sie können sie zurückgeben. – syntonym

+1

Warum möchten Sie sie nicht in Funktionen setzen? Das ist buchstäblich der Punkt von ihnen – casraf

+2

Die offensichtliche Wahl sind, nun, Funktionen. Warum willst du dort keine Funktionen verwenden? Zeigen Sie uns ein konkreteres Beispiel, damit wir Ihr Problem besser verstehen können. – brandizzi

Antwort

1

Wie die anderen schon gesagt haben Die beste Lösung ist wahrscheinlich die Verwendung von Funktionen. Wenn Sie viele Variablen von einer Funktion zur anderen übergeben müssen könnten Sie auch diesen Ansatz:

if __name__ == '__main__:' 
    task == sys.argv[1] 

    if task == 'task3': 
     some code 

    if task =='task1' or task == 'task3': 
     code block1 

    if task == 'task2': 
     code block2 

Aber ich empfehle, über eine andere Lösung zu denken. Ihre Codeblöcke sollten bestimmte Aufgaben darstellen, die unabhängig voneinander funktionieren und dann: Funktionen! Die Lösung, die ich vorgestellt habe, wird schnell hässlich und es wird schwierig sein zu verfolgen, welcher Codeblock welche Variablen bereitstellt.

Verwandte Themen