Pythonische Methode zum Erzeugen von Daten außerhalb einer Methode

8

Eine dumme Frage, aber das nervt mich (unabhängig von Downvotes für meine Schwachsinnigkeit!): Ich glaube, ich habe eine unsinnige Angst davor, Daten außerhalb einer Methode zu generieren, die diese Methode verwendet (ohne Veränderung), aber ich bin unsicher Wenn dies der Fall ist.

Nehmen wir an, ich habe eine Methode myfx , die ein Wörterbuch datadex benötigt, das eine langwierige Operation erfordert, aber allen Anrufen während dieser Sitzung gemeinsam ist. Der einfachste, aber nicht machbare Weg ist:

%Vor%

aber das wird zu viel Zeit verschwenden. Also wäre es am besten, es einmal im Hauptbereich zu machen, so wie man es mit Klassenvariablen macht:

%Vor%

Allerdings weiß ich nicht warum, aber ich bemühe mich, dies zu vermeiden. Es ist unelegant, aber ich denke nicht, dass das der Fall ist. Ich gehe generell auf Sperrungen:

%Vor%

Oder schlimmer, einen Kurs zu machen. Ich code fast ausschließlich in Python und JS. Meine beste Vermutung ist, dass es eine Reminiszenz an meine Perl-Coding-Tage ist - ich finde, dass ich Variablen zuerst als Pascal schreibe, also denke ich, dass einige Gewohnheiten als Schatten bleiben -, aber das würde nicht die Klasse oder Schließung wie OO-Perl erklären ganz anders.

    
Matteo Ferla 09.02.2016, 19:00
quelle

3 Antworten

6

Eine Klasse ist der richtige Weg, um dieses Verhalten zu kapseln. Sie haben einige Daten, die von mehreren Funktionsaufrufen gemeinsam genutzt werden.

%Vor%

Obwohl es sicherlich noch andere Alternativen gibt, wird dies die gängigste und einfachste Methode in Python sein.

    
chepner 09.02.2016, 19:18
quelle
2

Python-Funktionen sind Objekte und können Attribute haben. Wenn Sie Ihre Funktion nicht innerhalb einer Klasse haben wollen, können Sie so etwas tun:

%Vor%

Ich schätze, dass Sie eine globale Variable vermeiden möchten.

    
imreal 09.02.2016 19:23
quelle
0

Wenn Sie wirklich nur objektorientierte Programmierung vermeiden möchten, können Sie folgendes tun, um eine Karte zu erstellen, in der get_dict() einen Generator zum Speichern des Diktats verwendet.

%Vor%     
Alex 10.02.2016 09:44
quelle

Tags und Links