Ruby <-> Python
-
- User
- Beiträge: 7
- Registriert: Freitag 1. September 2006, 08:34
- Wohnort: Nürnberg
- Kontaktdaten:
Mal eine Frage: An sich wirken ja Ruby und Python sehr ähnlich. Was sind eigentlich die genauen Unterschiede der beiden Sprachen neben Einrückung versus "end".
Milchreis schmeckt hervorragend, wenn man ihn kurz vor dem Verzehr durch ein saftiges Steak ersetzt.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Das ist wieder ein Thema für Sich, deswegen hab ich es mal vom ursprüngliche Thread abgetrennt...
Da du ja schon ruby kennst, schau dir mal die Fakten über Python an. Dann kannst du vergleichen:
[wiki]Python[/wiki]
Ansonsten schau mal hier:
http://www.python-forum.de/topic-5034.html
http://www.python-forum.de/topic-5414.html
http://www.python-forum.de/topic-308.html
Da du ja schon ruby kennst, schau dir mal die Fakten über Python an. Dann kannst du vergleichen:
[wiki]Python[/wiki]
Ansonsten schau mal hier:
http://www.python-forum.de/topic-5034.html
http://www.python-forum.de/topic-5414.html
http://www.python-forum.de/topic-308.html
-
- User
- Beiträge: 7
- Registriert: Freitag 1. September 2006, 08:34
- Wohnort: Nürnberg
- Kontaktdaten:
Hmm ich find nicht das, was ich Suche. Ich wüsste eben gerne, was die Vorteile von Python sind gegenüber Ruby.
Oder ist es gar nicht zu beschreiben und es ist einfach nur das Feeling? Was ich kaum glauben kann, denn ohne Grund nehmen große Unternehmen wie Google nicht gerade Python, oder?
Anders ausgedrückt: Ich liebe C und Objective-C. Ich liebe die Syntax davon und es gefällt mir, darin Programme zu schreiben, weil es mich glücklich macht. Wo denkt ihr, wäre ich besser aufgehoben?
Oder ist es gar nicht zu beschreiben und es ist einfach nur das Feeling? Was ich kaum glauben kann, denn ohne Grund nehmen große Unternehmen wie Google nicht gerade Python, oder?
Anders ausgedrückt: Ich liebe C und Objective-C. Ich liebe die Syntax davon und es gefällt mir, darin Programme zu schreiben, weil es mich glücklich macht. Wo denkt ihr, wäre ich besser aufgehoben?
Milchreis schmeckt hervorragend, wenn man ihn kurz vor dem Verzehr durch ein saftiges Steak ersetzt.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Vorteile: Performance, eine mir Angenehmere Denkweise (eben der ganze Zen of Python, zum beispiel "Explizit is better than implizit" wie es bei Ruby manchmal der Fall ist), die LCs, Generatoren, Einrücken, Syntax insgesammt, wesentlich bessere Dokumentation, Unterstützung von Unicode. Und auch Pythons Art des Principle of least Surprise ist für mich weniger überraschend als Rubys POLS. Daneben mag ich die Leute in der Community - was aber nicht heißen soll, das Rubys Community schlecht ist, aber ich fühl mich hier einfach mehr "daheim".Danie hat geschrieben:Hmm ich find nicht das, was ich Suche. Ich wüsste eben gerne, was die Vorteile von Python sind gegenüber Ruby.
Es ist teilweise auch das Feeling - ich finde den Weg etwas auf Python zu lösen wesentlich eher zu meiner Denkweise passend als wie das in Ruby gelöst werden würde.Danie hat geschrieben:Oder ist es gar nicht zu beschreiben und es ist einfach nur das Feeling? Was ich kaum glauben kann, denn ohne Grund nehmen große Unternehmen wie Google nicht gerade Python, oder?
Tcl? Blödsinn beiseite, aber Spass macht es sowohl in Ruby als auch in Python zu schreiben, vor allem wenn die Programme dann auch noch funktionieren.Danie hat geschrieben:Anders ausgedrückt: Ich liebe C und Objective-C. Ich liebe die Syntax davon und es gefällt mir, darin Programme zu schreiben, weil es mich glücklich macht. Wo denkt ihr, wäre ich besser aufgehoben?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Vier von den Fünf Punkten des "Spirit of C" aus dem C Standard sind auch auf Python übertragbar. Ich denke Python ist näher an C als Ruby. Das ist vom "Feeling" eher in der Perl Ecke anzusiedeln.Danie hat geschrieben:Anders ausgedrückt: Ich liebe C und Objective-C. Ich liebe die Syntax davon und es gefällt mir, darin Programme zu schreiben, weil es mich glücklich macht. Wo denkt ihr, wäre ich besser aufgehoben?
Das "Spirit of C"
1. Trust the programmer.
2. Don't prevent the programmer from doing what needs to be done.
3. Keep the language small and simple.
4. Provide only one way to do an operation.
5. Make it fast, even if it is not guaranteed to be portable.
Der letzte Punkt gilt für Python eher nicht. Was für eine High Level Language natürlich als Vorteil zu sehen ist.
Hoi Danie,
Meine Meinung: Ich schätze zwar auch das Feeling von Python über dem von Ruby, aber das ist natürlich rein subjektiv - andere Leute sehen das eben anders und ich nehme ja sonst auch manchmal Sprachen, die ich nicht mag, wenn ich denn damit machen kann, was ich machen will. Aber was wirklich zählt: Python bietet alle Module, die ich brauche - Ruby (noch) nicht. Ruby holt zwar langsam auf (es gibt sogar wxRuby), aber es bietet eben nicht alles was ich brauche und nicht so ausgereift.
Gruß,
Christian
PS Andererseits finde ich "... on Rails" mittlerweile derart attraktiv, daß ich mir überlege mich damit einmal intensiever zu befassen ...
Na ja, denke das hat eher historische Gründe: Es hat sich halt erst einmal nur Python angeboten.Danie hat geschrieben:Oder ist es gar nicht zu beschreiben und es ist einfach nur das Feeling? Was ich kaum glauben kann, denn ohne Grund nehmen große Unternehmen wie Google nicht gerade Python, oder?
Meine Meinung: Ich schätze zwar auch das Feeling von Python über dem von Ruby, aber das ist natürlich rein subjektiv - andere Leute sehen das eben anders und ich nehme ja sonst auch manchmal Sprachen, die ich nicht mag, wenn ich denn damit machen kann, was ich machen will. Aber was wirklich zählt: Python bietet alle Module, die ich brauche - Ruby (noch) nicht. Ruby holt zwar langsam auf (es gibt sogar wxRuby), aber es bietet eben nicht alles was ich brauche und nicht so ausgereift.
Gruß,
Christian
PS Andererseits finde ich "... on Rails" mittlerweile derart attraktiv, daß ich mir überlege mich damit einmal intensiever zu befassen ...
-
- User
- Beiträge: 9
- Registriert: Montag 11. September 2006, 06:48
- Wohnort: Düsseldorf
- Kontaktdaten:
Hi,
jetzt oute ich mich einfach mal als bekennender Ruby-User und möchte mal ein wenig darstellen, warum ich Ruby doch ein wenig besser finde, als Python. Wobei mir Python natürlich auch ganz gut gefällt. Aber es fehlen für mich einfach die kleinen Besonderheiten von Ruby.
1.) Es ist z.B. ohne Probleme möglich, während der Laufzeit, Methoden zu einer Klasse hinzuzufügen.
z.B.
2.) Es gibt Mix-Ins. Das heißt, man schreibt eine Funktion und kann diese zu einer Klasse hinzumischen.
Besonders Cool ist das, wenn man fertige Funktionalität von Ruby zu einer Klasse hinzufügt.
Damit läßt sich natürlich auch Mehrfachvererbung realisieren.
3.) Es gibt Blöcke.
Diese Möglichkeit kommt aus der funktionalen Programmierung. Im Prinzip handelt es sich dabei um Listen von Anweisungen. Programmierer können Blöcke mit Parametern versehen und als Argumente von Methodenaufrufen verwenden:
Damit sind natürlich auch Closures(Über den Lambda-Befehl ) möglich.
4.) Ruby kann dynamisch Methoden aufrufen.
Ich könnte natürlich noch ein paar weitere Beispiele zeigen, aber ich denke es ist klar geworden, das Ruby schon ein paar Möglichkeiten hat, die Python nicht bietet.
Was mir an Python aber sehr gut gefällt, ist die ausgereifte WxWidgets Schnittstelle und die etwas höhere Verarbeitungsgeschwindigkeit. Ich denke aber, das sich dies mit den JIT-Compiler von Ruby 2.0 erledigen wird.
jetzt oute ich mich einfach mal als bekennender Ruby-User und möchte mal ein wenig darstellen, warum ich Ruby doch ein wenig besser finde, als Python. Wobei mir Python natürlich auch ganz gut gefällt. Aber es fehlen für mich einfach die kleinen Besonderheiten von Ruby.
1.) Es ist z.B. ohne Probleme möglich, während der Laufzeit, Methoden zu einer Klasse hinzuzufügen.
z.B.
Code: Alles auswählen
class Info
def hallo
print "Hallo"
end
end
x = Info.new
def x.welt
print " Welt"
end
x.hallo
x.welt
Code: Alles auswählen
module Debug
def wer_bin_ich?
"#{self.class.name} ; #{self.to_s}"
end
end
class Phonograph
include Debug #Funktion wird hinzugefügt
...
end
class EightTrack
include Debug
...
end
ph = Phonograph.new("Blues")
et = EightTrack.new("Surrealistic Pillow")
ph.wer_bin_ich? -> "Phonograph : Blues"
et.wer_bin_ich? -> "EightTrack : Surrealistic Pillow"
Damit läßt sich natürlich auch Mehrfachvererbung realisieren.
3.) Es gibt Blöcke.
Diese Möglichkeit kommt aus der funktionalen Programmierung. Im Prinzip handelt es sich dabei um Listen von Anweisungen. Programmierer können Blöcke mit Parametern versehen und als Argumente von Methodenaufrufen verwenden:
Code: Alles auswählen
class BlockExample
def m1(&b)
b.call(42) # Block wird mit den Wert 42 gestartet
end
def m2
if block_given? then yield # Block wird ausgeführt
end
end
end
be = BlockExample.new
be.m1 {|arg1|,print arg1} -> 42
be.m2 {print "Hallo"} -> "Hallo"
4.) Ruby kann dynamisch Methoden aufrufen.
Code: Alles auswählen
class MyClass
def info
"I am alive"
end
end
c = MyClass.new
print c.send(:info) -> I am alive
Was mir an Python aber sehr gut gefällt, ist die ausgereifte WxWidgets Schnittstelle und die etwas höhere Verarbeitungsgeschwindigkeit. Ich denke aber, das sich dies mit den JIT-Compiler von Ruby 2.0 erledigen wird.
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Zu 1.)
Code: Alles auswählen
class Info:
def hallo(self):
print "Hallo"
x = Info()
def welt():
print "Welt"
x.welt = welt
x.hallo()
x.welt()
Du hast hier dem Objekt eine Methode hinzugefügt und nicht der Klasse. Das geht in Python auch:Zambo hat geschrieben:1.) Es ist z.B. ohne Probleme möglich, während der Laufzeit, Methoden zu einer Klasse hinzuzufügen.
z.B.Code: Alles auswählen
class Info def hallo print "Hallo" end end x = Info.new def x.welt print " Welt" end x.hallo x.welt
Code: Alles auswählen
import new
class Info(object):
def hallo(self):
print 'Hallo'
x = Info()
def welt(self):
print 'Welt'
x.welt = new.instancemethod(welt, x, Info)
x.hallo()
x.welt()
Dreh den letzten Satz mal um: Mix-Ins lassen sich durch Mehrfachvererbung realisieren.2.) Es gibt Mix-Ins. Das heißt, man schreibt eine Funktion und kann diese zu einer Klasse hinzumischen.
Besonders Cool ist das, wenn man fertige Funktionalität von Ruby zu einer Klasse hinzufügt.Code: Alles auswählen
module Debug def wer_bin_ich? "#{self.class.name} ; #{self.to_s}" end end class Phonograph include Debug #Funktion wird hinzugefügt ... end class EightTrack include Debug ... end ph = Phonograph.new("Blues") et = EightTrack.new("Surrealistic Pillow") ph.wer_bin_ich? -> "Phonograph : Blues" et.wer_bin_ich? -> "EightTrack : Surrealistic Pillow"
Damit läßt sich natürlich auch Mehrfachvererbung realisieren.
Code: Alles auswählen
class Debug(object):
def wer_bin_ich(self):
return '%s : %s' % (self.__class__.__name__, self)
class Sound(object):
pass
class Phonograph(Sound, Debug):
def __init__(self, data):
self.data = data
def __str__(self):
return self.data
class EightTrack(Sound, Debug):
def __init__(self, data):
self.data = data
def __str__(self):
return self.data
ph = Phonograph('Blues')
et = EightTrack('Surrealistic Pillow')
print ph.wer_bin_ich()
print et.wer_bin_ich()
Im Prinzip handelt es sich einfach um anonyme Funktionen.3.) Es gibt Blöcke.
Diese Möglichkeit kommt aus der funktionalen Programmierung. Im Prinzip handelt es sich dabei um Listen von Anweisungen.
An dieser Stelle hat Python den Nachteil, dass in ``lambda``-Ausdrücken keine Anweisungen möglich sind. Das heisst, ``print`` ist nicht drin und muss durch einen Funktionsaufruf ersetzt werden.Programmierer können Blöcke mit Parametern versehen und als Argumente von Methodenaufrufen verwenden:
Code: Alles auswählen
class BlockExample def m1(&b) b.call(42) # Block wird mit den Wert 42 gestartet end def m2 if block_given? then yield # Block wird ausgeführt end end end be = BlockExample.new be.m1 {|arg1|,print arg1} -> 42 be.m2 {print "Hallo"} -> "Hallo"
Code: Alles auswählen
import sys
def m1(func):
func(42)
def m2(func):
func()
m1(lambda arg1: sys.stdout.write(str(arg1) + '\n'))
m2(lambda: sys.stdout.write('Hallo\n'))
Closures sind in Python auch möglich.Damit sind natürlich auch Closures(Über den Lambda-Befehl ) möglich.
Das geht auch in Python:4.) Ruby kann dynamisch Methoden aufrufen.
Code: Alles auswählen
class MyClass def info "I am alive" end end c = MyClass.new print c.send(:info) -> I am alive
Code: Alles auswählen
class MyClass(object):
def info(self):
return 'I am alive'
c = MyClass()
print getattr(c, 'info')()
Ausser Anweisungen in Blöcken habe ich nichts grosses in Deinen Beispielen entdecken können.Ich könnte natürlich noch ein paar weitere Beispiele zeigen, aber ich denke es ist klar geworden, das Ruby schon ein paar Möglichkeiten hat, die Python nicht bietet.
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Gruß, mawe
Mich würde mal interessieren: Wann braucht man das? Hat das schon mal jemand verwendet? IMO wird der Code dadurch unübersichtlich (weil der Code der Klasse verstreut wird), oder übersehe ich einen gravierenden Vorteil?1.) Es ist z.B. ohne Probleme möglich, während der Laufzeit, Methoden zu einer Klasse hinzuzufügen.
Gruß, mawe
-
- User
- Beiträge: 9
- Registriert: Montag 11. September 2006, 06:48
- Wohnort: Düsseldorf
- Kontaktdaten:
Also zu Punkt 1 und 4 muß ich euch recht geben. Das geht in Python. Mal abgesehen davon, dass mir der Ruby-Code besser gefällt. Aber darum geht es nicht.
Das mit den Blöcken hat BlackJack schon zugegeben, dass das in Python so nicht möglich ist. Was natürlich schon für sich alleine ein Grund seien kann, Ruby vorzuziehen.
Aber bei den Mix-Ins muß ich doch widersprechen. Natürlich kann man Mix-Ins über Mehrfachvererbung realisieren. Aber das Konzept geht bei Ruby doch um einiges weiter, als es bei Python möglich ist. Zum Beispiel möchte ich schon gerne wissen, ob dies in Python auch so möglich wäre?
Nebenbei, was großes soll man auch nicht in den Beispielen entdecken. Es soll nur ein paar Konzepte aufzeigen, die ich in Ruby besonders gelungen finde.
Gruß Zambo
Das mit den Blöcken hat BlackJack schon zugegeben, dass das in Python so nicht möglich ist. Was natürlich schon für sich alleine ein Grund seien kann, Ruby vorzuziehen.
Aber bei den Mix-Ins muß ich doch widersprechen. Natürlich kann man Mix-Ins über Mehrfachvererbung realisieren. Aber das Konzept geht bei Ruby doch um einiges weiter, als es bei Python möglich ist. Zum Beispiel möchte ich schon gerne wissen, ob dies in Python auch so möglich wäre?
Code: Alles auswählen
module Summable
def sum
inject { |v,n| v+n }
end
end
class Array
include Summable
end
class Range
include Summable
end
[1,2,3,4,5].sum -> 15
('a'..'m').sum -> "abcdefghijklm"
Also ich habe das mal benutzt, um eine Webanwendung während sie lief upzudaten.mawe hat geschrieben:Hi!
Mich würde mal interessieren: Wann braucht man das? Hat das schon mal jemand verwendet? IMO wird der Code dadurch unübersichtlich (weil der Code der Klasse verstreut wird), oder übersehe ich einen gravierenden Vorteil?1.) Es ist z.B. ohne Probleme möglich, während der Laufzeit, Methoden zu einer Klasse hinzuzufügen.
Gruß, mawe
Gruß Zambo
Zuletzt geändert von Zambo am Montag 11. September 2006, 10:26, insgesamt 2-mal geändert.
Das ist eine nette Lösung wenn man einen Haufen Funktionen/Methoden hat, die man zur Laufzeit auf Grundlage von irgendwelchen externen Daten zu Klassen zusammensetzen möchte. Dann würde das Klassenobjekt selbst aber auch dynamisch erzeugt.mawe hat geschrieben:Mich würde mal interessieren: Wann braucht man das? Hat das schon mal jemand verwendet? IMO wird der Code dadurch unübersichtlich (weil der Code der Klasse verstreut wird), oder übersehe ich einen gravierenden Vorteil?1.) Es ist z.B. ohne Probleme möglich, während der Laufzeit, Methoden zu einer Klasse hinzuzufügen.
Beispiel wäre ein Spiel bei dem Elemente wie Spieler, Fahrzeuge, Gebäude etc. jeweils Durch eine Klasse repräsentiert werden, die einzelnen Funktionen/Fähigkeiten unabhängig definiert werden und dann per Code aus einer Beschreibungsdatei, z.B. in XML, Klassen zusammengestellt werden.
Zugegebenermassen ein sehr seltener Anwendungsfall. Allgemein, kann man sagen, man kann diese Technik anwenden wo man in anderen (statischeren) Sprachen zu einem Code-Generator greifen würde.
Das ist aber nur ein kosmetischer Unterschied. Man kann halt keine anonymen Blöcke definieren, na und, dann gibt man dem Kind halt einen Namen und definiert eine lokale Funktion.Zambo hat geschrieben:Das mit den Blöcken hat BlackJack schon zugegeben, dass das in Python so nicht möglich ist. Was natürlich schon für sich alleine ein Grund seien kann, Ruby vorzuziehen.
Das sieht aus nach "zur Laufzeit Basisklassen hinzufügen". Das geht grundsätzlich schon:Aber bei den Mix-Ins muß ich doch widersprechen. Natürlich kann man Mix-Ins über Mehrfachvererbung realisieren. Aber das Konzept geht bei Ruby doch um einiges weiter, als es bei Python möglich ist. Zum Beispiel möchte ich schon gerne wissen, ob dies in Python auch so möglich wäre?
Code: Alles auswählen
module Summable def sum inject { |v,n| v+n } end end class Array include Summable end class Range include Summable end [1,2,3,4,5].sum -> 15 ('a'..'m').sum -> "abcdefghijklm"
Code: Alles auswählen
In [44]: class A:
....: pass
....:
In [45]: class B:
....: def test(self):
....: print 'b'
....:
In [46]: a = A()
In [47]: a.test()
---------------------------------------------------------------------------
exceptions.AttributeError Traceback (most recent call last)
/home/marc/<ipython console>
AttributeError: A instance has no attribute 'test'
In [48]: A.__bases__ += (B,)
In [49]: a.test()
b
Und das wird in Python auch üblicherweise nicht so gemacht. Wie mawe schon sagte, man zersplittert so die Definition von Klassen.
Wenn man ein generisches Summieren haben möchte, dann definiert man eine entsprechende Funktion.
Code: Alles auswählen
import operator
NO_DEFAULT = object()
def my_sum(iterable, default=NO_DEFAULT):
iterator = iter(iterable)
try:
first = iterator.next()
except StopIteration:
if default is NO_DEFAULT:
raise TypeError('empty iterable without default')
else:
return default
return reduce(operator.add, iterator, first)
print my_sum(('H', 'a', 'l', 'l', 'o')) # -> 'Hallo'
print my_sum(xrange(6)) # -> 15
print my_sum([], 0.0) # -> 0.0
print my_sum('') # Raises Exception.
Du hast gesagt Dir fehlen ein paar Dinge in Python, die in Ruby möglich sind und es stellte sich heraus, das vieles davon in Python auch möglich ist.Nebenbei, was großes soll man auch nicht in den Beispielen entdecken. Es soll nur ein paar Konzepte aufzeigen, die ich in Ruby besonders gelungen finde.
-
- User
- Beiträge: 9
- Registriert: Montag 11. September 2006, 06:48
- Wohnort: Düsseldorf
- Kontaktdaten:
Es ist einfach eine Frage des Geschmacks. Durch die Blöcke wird meiner Meinung nach der Code besser lesbar und dadurch natürlich leichter zu warten. Aber man muß es natürlich nicht verwenden. Jeder wie er will. Natürlich kann man kann man alles was man in Ruby programmiert auch in Python machen. Das ist doch klar. Aber um es überspitzt zu sagen; Man kann auch alles in Assembler programmieren. Aber wer will das schon.BlackJack hat geschrieben:Das ist aber nur ein kosmetischer Unterschied. Man kann halt keine anonymen Blöcke definieren, na und, dann gibt man dem Kind halt einen Namen und definiert eine lokale Funktion.Zambo hat geschrieben:Das mit den Blöcken hat BlackJack schon zugegeben, dass das in Python so nicht möglich ist. Was natürlich schon für sich alleine ein Grund seien kann, Ruby vorzuziehen.
Also was du an Code geschrieben hast, ist eher ein Argument für Ruby Nicht böse nehmenDas sieht aus nach "zur Laufzeit Basisklassen hinzufügen". Das geht grundsätzlich schon:Aber bei den Mix-Ins muß ich doch widersprechen. Natürlich kann man Mix-Ins über Mehrfachvererbung realisieren. Aber das Konzept geht bei Ruby doch um einiges weiter, als es bei Python möglich ist. Zum Beispiel möchte ich schon gerne wissen, ob dies in Python auch so möglich wäre?
Code: Alles auswählen
module Summable def sum inject { |v,n| v+n } end end class Array include Summable end class Range include Summable end [1,2,3,4,5].sum -> 15 ('a'..'m').sum -> "abcdefghijklm"
Allerdings kann man bei Typen die in C implementiert sind, entscheiden ob die auf diese Weise verändert werden dürfen und das ist bei den eingebauten Typen ist nicht der Fall.Code: Alles auswählen
In [44]: class A: ....: pass ....: In [45]: class B: ....: def test(self): ....: print 'b' ....: In [46]: a = A() In [47]: a.test() --------------------------------------------------------------------------- exceptions.AttributeError Traceback (most recent call last) /home/marc/<ipython console> AttributeError: A instance has no attribute 'test' In [48]: A.__bases__ += (B,) In [49]: a.test() b
Und das wird in Python auch üblicherweise nicht so gemacht. Wie mawe schon sagte, man zersplittert so die Definition von Klassen.
Wenn man ein generisches Summieren haben möchte, dann definiert man eine entsprechende Funktion.
Code: Alles auswählen
import operator NO_DEFAULT = object() def my_sum(iterable, default=NO_DEFAULT): iterator = iter(iterable) try: first = iterator.next() except StopIteration: if default is NO_DEFAULT: raise TypeError('empty iterable without default') else: return default return reduce(operator.add, iterator, first) print my_sum(('H', 'a', 'l', 'l', 'o')) # -> 'Hallo' print my_sum(xrange(6)) # -> 15 print my_sum([], 0.0) # -> 0.0 print my_sum('') # Raises Exception.
Aber Ruby ist doch um einiges leichter zu lesen und zu verstehen. Was du da für einen Aufwand treiben mußt ist schon jenseits von gut und böse.
Ja, die Hälfte. Der Rest geht entweder nicht oder nur durch einen so hohen Aufwand, dass die Verwendung von Phython kaum zu rechtfertigen ist.Du hast gesagt Dir fehlen ein paar Dinge in Python, die in Ruby möglich sind und es stellte sich heraus, das vieles davon in Python auch möglich ist.Nebenbei, was großes soll man auch nicht in den Beispielen entdecken. Es soll nur ein paar Konzepte aufzeigen, die ich in Ruby besonders gelungen finde.
Aber um die Sache zu beenden. Ich denke, die Leute sollen sich selbst ein Urteil bilden. Die Fakten stehen hier in diesen Beiträgen und jeder kann selbst entscheiden was für ihn wichtiger ist. Ich denke, das Ruby und Python tolle Programmiersprachen sind. Zumindest im Vergleich zu Java oder Pascal.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Das mach IMHO zum Beispiel dann Sinn, wenn du in deinem Programm ein externes Modul verwendest und dem einfach eine Sinnvolle Methode noch fehlt. Nun kann man es einfach hinzufügen, ohne das Ursprüngliche Modul zu "patchen"...mawe hat geschrieben:Mich würde mal interessieren: Wann braucht man das? Hat das schon mal jemand verwendet? IMO wird der Code dadurch unübersichtlich (weil der Code der Klasse verstreut wird), oder übersehe ich einen gravierenden Vorteil?
Wobei man das meist durch einfaches Erben erledigen kann...