Programmiert ihr mit Python auch solche Schweinereien?
-
def plotData( numberOfEntries ): liste = [7,8,9,0] if numberOfEntries == "all": numberOfEntries = len(liste) - 1 else: numberOfEntries = min(max(0,numberOfEntries), len(liste)-1) for i in range(0, numberOfEntries): drawValue(liste[i]) plotData(1) plotData("all")
-
In so einem Fall würde ich eher einen Funktion ohne Parameter anbieten, als da einen string zu übergeben.
-
Gab es da nicht auch Default-Argumente?
def plotData( numberOfEntries = sys.maxint ): liste = [7,8,9,0] showNumberOfEntries = min(max(0,numberOfEntries), len(liste)-1) for i in range(0, showNumberOfEntries): drawValue(liste[i]) plotData(1) plotData()
Vielleicht zerlegt man sowas. Und man gibt kaum nur eine lokale Liste aus.
def unguardedPlotData( liste , numberOfEntries ): for i in range(0, showNumberOfEntries): drawValue(liste[i]) def plotData( liste , numberOfEntries ): unguardedPlotData( liste , min(max(0,numberOfEntries), len(liste)-1) ) def plotData( liste ): unguardedPlotData( liste , len(liste)-1 ) plotData(1) plotData()
-
In python gibt es keine Funktions Überladung..
Ich würde eher zu so was tendieren:
def plotData( numberOfEntries = "" ): liste = [7,8,9,0] if numberOfEntries == "": numberOfEntries = len(liste) - 1 else: numberOfEntries = min(max(0,numberOfEntries), len(liste)-1) for i in range(0, numberOfEntries): drawValue(liste[i]) plotData(1) plotData()
Ich finde nichts zu übergeben, um alles auszugeben natürlicher, als einen (eigetnlichen sinnlosen) string übergeben zu müssen. Technisch kommt es natürlich auf das gleiche hinaus. (Wir ja schliesslich auch ein string überprüft).
-
meine version. None ist bestimmt schneller als string
def plotData( numberOfEntries = None ): liste = [7,8,9,0] if numberOfEntries == None: numberOfEntries = len(liste) - 1 else: numberOfEntries = min(max(0,numberOfEntries), len(liste)-1) for i in range(0, numberOfEntries): drawValue(liste[i]) plotData(1) plotData()
-
Also bei None oder leerem String würde ich eher keine Elemente erwarten statt alle.
Aber das war so nur ein Beispiel, eigentlich wollte ich ja wissen, ob ihr auch unterschiedliche Typen für die gleiche Variable verwendet oder den Typ sogar noch zu Laufzeit ändert?
-
flyhigh schrieb:
Also bei None oder leerem String würde ich eher keine Elemente erwarten statt alle.
Mir scheint, 'None is a common value', um NichtDaSein des Parameters anzuzeigen, also diesbezüglich Überladung nachzubilden.
-
flyhigh schrieb:
Aber das war so nur ein Beispiel, eigentlich wollte ich ja wissen, ob ihr auch unterschiedliche Typen für die gleiche Variable verwendet oder den Typ sogar noch zu Laufzeit ändert?
Duck typing: wenn die funktion auf dem Typ das richtige macht, dann darfst du den Typ auch reinstecken. Also
def exponentiate(x): """ wenn's addier- und multiplizierbar ist, sollte es auch exponierbar sein. (?) """ assert(is_from_a_compatible_algebra(x)) return complicated_formula(x) def print_nice(x): """ egal was x ist -- wenn ich's printen kann, kann ich's auch nice_printen """ print "OMGLOL--->", x, "<----!!!!" def go_warp(x, warp_factor = 9.99): """ x muss auf warp gehen können. wenn x nicht auf warp gehen kann -- ja was dann? soll ich das erst prüfen, oder den laufzeitfehler riskieren? """ if x.readyForWarp(): x.warp(warp_factor)
-
volkard schrieb:
Bashar schrieb:
volkard schrieb:
DEvent schrieb:
IMHO nennt man das "OOP".
Polymorphie.
Dynamic Typing.
Polymorphie.
Duck-Typing
-
hustbaer schrieb:
volkard schrieb:
Bashar schrieb:
volkard schrieb:
DEvent schrieb:
IMHO nennt man das "OOP".
Polymorphie.
Dynamic Typing.
Polymorphie.
Duck-Typing
MEGA QUOTE.
ähm irgendwann einig ? oder alles richtig ?
btw: hier haben ja einige was gegen C++ oder dessen Programmierer ? :p