Designfrage - Class oder function Array Kreierung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Krischu
User
Beiträge: 87
Registriert: Dienstag 14. Januar 2014, 09:07

Ich habe das Einlesen eines 2-dimensionalen Array (n Zeilen x m Spalten) in eine function gepackt und will im
Hauptprogramm mit diesem Array arbeiten, es plotten etc.

Mir wäre es am liebsten, das Array wäre ein globales, anfangs mit unbestimmter Dimension, nach dem Einlesen der Daten
(wobei die Dimension ermittelt wird), soll das Array gefüllt sein und die Dimension sollte dem rufenden "Hauptprogramm" bekannt sein.

Die andere Designidee wäre eine Class zu bauen, die das Array als private member hat und dann darauf mit eigenen accress-Methoden zuzugreifen.

Meinungen willkommen,

Grüße
Christoph
--
Grüße
Christoph
BlackJack

@Krischu: Ein Array mit unbestimmten Dimensionen kann man gar nicht erstellen (wir reden doch hier von Numpy-Arrays, oder?)

Warum global? Warum kann Deine Funtkion das Array nicht erstellen und als Rückgabewert zurück geben? Das kann/sollte man dann den anderen Funktionen als Argument übergeben statt einfach so global darauf zuzugreifen.

„Private member” gibt es in Python nicht. Man kennzeichnet per Konvention Attribute die nicht zur öffentlichen API gehören mit *einem* führenden Unterstrich. Zugriffsmethoden sind okay, solange sie nicht trivial sind, dann ist letztendlich das Attribut öffentlich und kann auch direkt verwendet werden, sollte also keinen führenden Unterstrich bekommen.
Krischu
User
Beiträge: 87
Registriert: Dienstag 14. Januar 2014, 09:07

Ja, numpy arrays.

Gut, ich meinte so etwas wie einen Pointer auf ein Array, das dann alloziert wird.

Kann die Function ein Array zurückgeben? Wenn ja, dann würde ich es auch so machen.
--
Grüße
Christoph
BlackJack

@Krischu: Es gibt in Python keine Pointer als eingebauten Datentyp. Netter Nebeneffekt: Es kann keine Pointer auf uninitialisierten Speicher geben. Und ja, man kann Arrays auch als Rückgabewerte verwenden. Warum sollte man das nicht können? In Python ist alles was man an einen Namen binden kann ein Objekt. Und man kann jedes Objekt als Argument übergeben oder als Rückgabewert verwenden.
Krischu
User
Beiträge: 87
Registriert: Dienstag 14. Januar 2014, 09:07

BlackJack hat geschrieben:@Krischu: Es gibt in Python keine Pointer als eingebauten Datentyp. Netter Nebeneffekt: Es kann keine Pointer auf uninitialisierten Speicher geben. Und ja, man kann Arrays auch als Rückgabewerte verwenden. Warum sollte man das nicht können? In Python ist alles was man an einen Namen binden kann ein Objekt. Und man kann jedes Objekt als Argument übergeben oder als Rückgabewert verwenden.
Schön. Wie typisiere ich dann die function?

p.myfunc() gebe ein (numpy) array oder False zurück. 1. Geht das? 2. wie teile ich das dem Caller mit?


--
Grüße
Christoph
--
Grüße
Christoph
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Krischu hat geschrieben:p.myfunc() gebe ein (numpy) array oder False zurück. 1. Geht das?
Wie wäre es mit einfach mal ausprobieren? ;-) Statt ``False`` würde man eher ``None`` zurückgeben. Aber: warum willst du überhaupt etwas anderes als ein Array zurückgeben?
Krischu hat geschrieben:2. wie teile ich das dem Caller mit?
Warum sollte den das interessieren? Der sieht doch den Rückgabewert.
Das Leben ist wie ein Tennisball.
BlackJack

@Krischu: Du „typisierst” eine Funktion gar nicht. Das mit entweder `numpy.array` oder `False` geht, aber so etwas sollte man nicht machen. Falls das `False` eine Art spezieller Fehlerwert sein sollte: Dafür wurden Ausnahmen erfunden. Ansonsten merkt der Aufrufer ja schon was er da bekommt. Wenn er versucht es als etwas zu behandeln was es nicht ist, fällt der Code auf die Nase. Darum sollte man auch nicht so derartig verschiedene Objekte zurückgeben wie ein Array oder einen Wahrheitswert, weil man weder das eine noch das andere sinnvoll als das jeweils andere behandeln kann.
Antworten