Hallo
Ich habe letztens diesen Link von nem Kumpel geschickt bekommen: http://www.javablackbelt.com/
Ich habe mich gefragt ob vielleicht irgendwer sowas ähnliches für Python kennt. Fände ich lustig und ein ansporn zum weiter coden =)
greets Apfelbox
Schwarzer Gürtel in Python
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Sehe ich das richtig? Das sind Zertifikate die man bekommt, dass man übermäßig verkomplizierte Technologien kennt und nutzen kann? Also etwa EJB, JMX, JNDI, JMS, JDBC, JTA, JAAS, JAXB, JAXP, JAXR, JACC, JCA, JAF, JPA und JSTL kennt und benutzen kann? (Jeder der Zope3 kompliziert findet sollte mal in Wikipedia J2EE ansehen)Apfelbox hat geschrieben:Ich habe letztens diesen Link von nem Kumpel geschickt bekommen: http://www.javablackbelt.com/
Nein, sowas ist mir nicht bekannt. Für mich wäre ein Ansporn zum Coden etwas zu kennen/können was andere Regulars in dem Forum hier nicht können. Ist aber gar nicht so leicht, wie man denken könnte.Apfelbox hat geschrieben:Ich habe mich gefragt ob vielleicht irgendwer sowas ähnliches für Python kennt. Fände ich lustig und ein ansporn zum weiter coden =)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Der Nachteil von Python ─ es ist einfach zu leicht; die APIs zu durchschaubar. Kein Stoff für Zertifikate mit denen die einen Geld verdienen und die anderen sich brüsten können.
Leonidas ist der Master of Buzzword Desaster!Leonidas hat geschrieben:Also etwa EJB, JMX, JNDI, JMS, JDBC, JTA, JAAS, JAXB, JAXP, JAXR, JACC, JCA, JAF, JPA und JSTL kennt und benutzen kann? (Jeder der Zope3 kompliziert findet sollte mal in Wikipedia J2EE ansehen)
Ist dass denn so schwer? Ich habe jedenfalls den Eindruck wenn man eine beliebige Kombination von zwei oder drei Buchstaben nimmt und ein 'J' vorne anstellt, hat man mit ziemlicher Sicherheit den Namen von irgendeiner Java-Technik oder -Spezifikation.
Man beachte die Ursprünge der Namen von Programmiersprachen:
Python -> Monty Python -> macht Spaß
Java -> Kaffee -> ist ungesund, macht nervös, abhängig und hohen Blutdruck
Ruby -> Edelstein -> ist nicht alles Gold was glänzt
Python -> Monty Python -> macht Spaß
Java -> Kaffee -> ist ungesund, macht nervös, abhängig und hohen Blutdruck
Ruby -> Edelstein -> ist nicht alles Gold was glänzt
Jo, Copy & PasteGromit hat geschrieben:Leonidas ist der Master of Buzzword Desaster!Leonidas hat geschrieben:Also etwa EJB, JMX, JNDI, JMS, JDBC, JTA, JAAS, JAXB, JAXP, JAXR, JACC, JCA, JAF, JPA und JSTL kennt und benutzen kann? (Jeder der Zope3 kompliziert findet sollte mal in Wikipedia J2EE ansehen)
Y0Gi hat geschrieben:Man beachte die Ursprünge der Namen von Programmiersprachen:
Python -> Monty Python -> macht Spaß
Java -> Kaffee -> ist ungesund, macht nervös, abhängig und hohen Blutdruck
Ruby -> Edelstein -> ist nicht alles Gold was glänzt
BTW Ruby: Was ihr immer alle gegen Ruby habt Wenn einige die Blöcke checken würde und wie eleganten und kurzen Code man damit fabrizieren kann...
I will Blöcke in Python!!11elf11!! Und Zwar jetzt. Georg Brandl, bring das mal bitte zur Sprache, da du ja im Core Team bist
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Das hat mit Checken oder nicht Checken nix zu tun. In Python sind Funktionen First-Class-Objects und damit kannst du sie einer Funktion übergeben, wie in Ruby einen Codeblock. Ist halt kein sytaktischer Zucker dabei.poker hat geschrieben:BTW Ruby: Was ihr immer alle gegen Ruby habt Wenn einige die Blöcke checken würde und wie eleganten und kurzen Code man damit fabrizieren kann...
Ich hätt mir ja ein anderes with-Statement gewünscht, aber solange Python die momentanen Scoping Regeln hat wird damit nix.
TUFKAB – the user formerly known as blackbird
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
It's Open Source! Einen Beitrag auf python-dev oder (vielleicht angebrachter) python-ideas kann jeder schreiben. Nur kann ich dir versichern, dass das Thema bereits besprochen wurde (woraus dann das with-Statement entstanden ist) und mit entsprechendem Desinteresse behandelt werden wird.poker hat geschrieben: I will Blöcke in Python!!11elf11!! Und Zwar jetzt. Georg Brandl, bring das mal bitte zur Sprache, da du ja im Core Team bist
Nein, ich habe das so gemeint wie ich es geschrieben habe. Meine Aussage nochmal ausführlicher: Was haben immer "alle" (=viele) pythonistas gegen Ruby? Wenn einige von denen Rubys Blöcke verstehen würden und was für eleganten und kurzen code man damit schreiben kann, würde Ruby auf die halb soviel abschränkend wirkenmitsuhiko hat geschrieben:Das hat mit Checken oder nicht Checken nix zu tun. In Python sind Funktionen First-Class-Objects und damit kannst du sie einer Funktion übergeben, wie in Ruby einen Codeblock. Ist halt kein sytaktischer Zucker dabei.poker hat geschrieben:BTW Ruby: Was ihr immer alle gegen Ruby habt Wenn einige die Blöcke checken würde und wie eleganten und kurzen Code man damit fabrizieren kann...
IMO ist, dass viele Pythonistas Ruby nicht nur wegen den vielen einsatz von regexes nicht mögen, sondern weil denen auch der sehr kompakte (Um nicht zu sagene stark komprimiert ) code unbegreiflich erscheint, der IMO von den vielen Einsatz der Blöcke resultiert. -- Zumindest kommt es mir so vor. Ich habe halt immer diesen eindruck wenn ich mit ein par pythonistas rede die sich mit ruby **nur** oberflächlich beschäftigt haben.
Naja, ich finde das `with`-stmt schon ok, **aber** es hat IMO nicht viel gemeinsam mit den Blöcken von Ruby Klar, von der Intention her ähnlich, aber die Umsetzung ist halt anders und bei Python nicht so ausdrucksstark wie bei Ruby.mitsuhiko hat geschrieben: Ich hätt mir ja ein anderes with-Statement gewünscht, aber solange Python die momentanen Scoping Regeln hat wird damit nix.
Es ist eben geil in Ruby, IMO (und das siehst du doch auch so?), das man einfach Methoden schreiben kann die Blöcke entgegen nehmen können und dadurch viel Expressivität erlauben. Einfach in Python ein `__enter__` und `__exit__` in na class implementieren, und dann mit ein `with` davor gefolgt von ein `as name` zu schreiben, finde ich nicht sonderlich berauschend im verglich zu Blöcken. --Aber, ich muss sagen das ich pythons `with` auch nie als Ruby-Blöcke äquivalent angesehen habe, auch wenn man deren Herkunft ein wenig spüren kann. Und wenn man das berücksichtigt, finde ist das `with`-stmt auch eine geile Sache MAn darf es nur nicht vergleichen wollen
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
@poker: Ich finde es interessant, wie du anderen immer vorwirfst, sich nicht mit Ruby zu beschäftigen. Fakt ist, dass Ruby Blöcke in Python nicht funktionieren, weil wir eine Syntax haben, die auf Einrückung basiert. Das with Statement „hätte“ in die Richtung gehen können, ist es aber nicht.
Du darfst gerne Ruby nutzen, niemand hält dich davon ab.
Du darfst gerne Ruby nutzen, niemand hält dich davon ab.
TUFKAB – the user formerly known as blackbird
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Für so dumm würde ich jetzt die Pythonistas nicht halten, dass sie Rubys Blöcke nicht verstehen. Aber auch wenn man weiß, wie sie funktionieren, muss man sie nicht unbedingt in Python einbauen wollen.poker hat geschrieben: IMO ist, dass viele Pythonistas Ruby nicht nur wegen den vielen einsatz von regexes nicht mögen, sondern weil denen auch der sehr kompakte (Um nicht zu sagene stark komprimiert ) code unbegreiflich erscheint, der IMO von den vielen Einsatz der Blöcke resultiert. -- Zumindest kommt es mir so vor. Ich habe halt immer diesen eindruck wenn ich mit ein par pythonistas rede die sich mit ruby **nur** oberflächlich beschäftigt haben.
Ich halte first-class-Funktionen hier durchaus für ausreichend, und vor allem, mit Pythons Syntax vereinbar.Es ist eben geil in Ruby, IMO (und das siehst du doch auch so?), das man einfach Methoden schreiben kann die Blöcke entgegen nehmen können und dadurch viel Expressivität erlauben.
Dass Pythons `with` mit Rubys Blöcken nicht verglichen werden kann, sollte jedem hier klar sein (sonst sollte er sich nochmal PEP 343 anschauen ).
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Man beachte den Konjunktiv with ist nicht, hätte aber werden können.birkenfeld hat geschrieben:Dass Pythons `with` mit Rubys Blöcken nicht verglichen werden kann, sollte jedem hier klar sein (sonst sollte er sich nochmal PEP 343 anschauen ).
TUFKAB – the user formerly known as blackbird
@mitsuhiko:
Erstmal vorweg: Wie kommt es eigentlich, Armin, das du *grundsätzlich* erstmal alle meine Posts als negativ auffast? Das liest sich nämlich auch aus deinen jetzigen Post heraus, da du *pampig* reagierst. Gibt es irgendeinen bestimmten Grund? Gerne könne wir das auch per PM klären. Aber das will ich erstmal geklärt haben.
Dennoch auf deinen Post kurz ein par worte:
In wiefern verhindert das die Einrückung? Ich sehe da kein Problem.
Wenn ich dich richtig verstehe, wirfst du mir vor das ich in einem Python Forum ab und an Ruby in den Mund nehme und euch vorwerfe das ihr Ruby nicht nutzt? Oder um was geht es dir? Sry, ich werde aus deinen Posts nicht schlau.
Fakt ist, ich liebe Ruby **und** Python (und Python sogar noch mehr), sonst würde ich ja kaum mit Python Programmieren.
Naja...wie dem auch sei...
first-class-functions haben halt eine andere Expressivität als Ruby-Blöcke. Beide Konzepte erfordern eine andere mentale Herangehensweise, da es total komplett andere Konzepte sind. Beide, wenn richtig angewendet, sind aber in ihrer Ausführung Edel, Elegant, Perfekt, ...
Beide Konzepte in einer Sprache vereint, währe, zumindest für mich, das Höchste Kannst mich gerne für durchgeknallt halten...
Ich wüste persönlich auch nicht, warum es nicht gehen sollte beide Konzepte in Python zu haben. -- Das first-class-functions in Ruby (wegen dem Objektsystem.) nicht möglich ist, ist klar. Aber weshalb Blöcke in Python nicht gehen, müsstest du mir erklären. (Ja, Armin sagte schon wegen der Einrückungen, aber was genau verhindert das?)
Erstmal vorweg: Wie kommt es eigentlich, Armin, das du *grundsätzlich* erstmal alle meine Posts als negativ auffast? Das liest sich nämlich auch aus deinen jetzigen Post heraus, da du *pampig* reagierst. Gibt es irgendeinen bestimmten Grund? Gerne könne wir das auch per PM klären. Aber das will ich erstmal geklärt haben.
Dennoch auf deinen Post kurz ein par worte:
Wo werfe ich hier, oder habe ich jemals vorgeworfen das jemand sich nicht mit Ruby beschäftigt?! Mal ernsthaft, Armin. Bleibt doch jedem selber überlassen ober er sich mit Ruby beschäftigen möchte. Oder kling das hier wie ein Vorwurf? Zeig mir das mal bitte.mitsuhiko hat geschrieben:@poker: Ich finde es interessant, wie du anderen immer vorwirfst, sich nicht mit Ruby zu beschäftigen.
Das mag sein und glaube ich dir mal an der stelle, aber dennoch dürfte doch folgende Frage erlaubt sein oder?mitsuhiko hat geschrieben: Fakt ist, dass Ruby Blöcke in Python nicht funktionieren, weil wir eine Syntax haben, die auf Einrückung basiert. Das with Statement „hätte“ in die Richtung gehen können, ist es aber nicht.
In wiefern verhindert das die Einrückung? Ich sehe da kein Problem.
Das ist wider eine deiner negativ gefärbten Aussagen :/ Wo habe ich das behauptet? Wann habe ich das behauptet? Warum sollte ich sowas behaupten?mitsuhiko hat geschrieben: Du darfst gerne Ruby nutzen, niemand hält dich davon ab.
Wenn ich dich richtig verstehe, wirfst du mir vor das ich in einem Python Forum ab und an Ruby in den Mund nehme und euch vorwerfe das ihr Ruby nicht nutzt? Oder um was geht es dir? Sry, ich werde aus deinen Posts nicht schlau.
Fakt ist, ich liebe Ruby **und** Python (und Python sogar noch mehr), sonst würde ich ja kaum mit Python Programmieren.
Naja...wie dem auch sei...
Das ist klar. Du, Reinhold, und Armin habt den Stein angestoßen in euren vorherigen Post, und ich habe darauf geantwortet.birkenfeld hat geschrieben: Dass Pythons `with` mit Rubys Blöcken nicht verglichen werden kann, sollte jedem hier klar sein (sonst sollte er sich nochmal PEP 343 anschauen ).
Das war auch nicht meine Aussage und habe ich auch nicht gemeint.birkenfeld hat geschrieben:Für so dumm würde ich jetzt die Pythonistas nicht halten, dass sie Rubys Blöcke nicht verstehen.poker hat geschrieben: IMO ist, dass viele Pythonistas Ruby nicht nur wegen den vielen einsatz von regexes nicht mögen, sondern weil denen auch der sehr kompakte (Um nicht zu sagene stark komprimiert ) code unbegreiflich erscheint, der IMO von den vielen Einsatz der Blöcke resultiert. -- Zumindest kommt es mir so vor. Ich habe halt immer diesen eindruck wenn ich mit ein par pythonistas rede die sich mit ruby **nur** oberflächlich beschäftigt haben.
Ja, ist halt ein anderes Konzept und bietet eine andere Herangehensweise. Hat aber mit Ruby-Blöcken genau soviel am Hut wie `with`birkenfeld hat geschrieben: Ich halte first-class-Funktionen hier durchaus für ausreichend, und vor allem, mit Pythons Syntax vereinbar.
first-class-functions haben halt eine andere Expressivität als Ruby-Blöcke. Beide Konzepte erfordern eine andere mentale Herangehensweise, da es total komplett andere Konzepte sind. Beide, wenn richtig angewendet, sind aber in ihrer Ausführung Edel, Elegant, Perfekt, ...
Beide Konzepte in einer Sprache vereint, währe, zumindest für mich, das Höchste Kannst mich gerne für durchgeknallt halten...
Ich wüste persönlich auch nicht, warum es nicht gehen sollte beide Konzepte in Python zu haben. -- Das first-class-functions in Ruby (wegen dem Objektsystem.) nicht möglich ist, ist klar. Aber weshalb Blöcke in Python nicht gehen, müsstest du mir erklären. (Ja, Armin sagte schon wegen der Einrückungen, aber was genau verhindert das?)
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Nein, es hat damit viel mehr "am Hut". Rubys Blöcke sind schließlich kaum was anderes als anonyme Funktionen...poker hat geschrieben:Ja, ist halt ein anderes Konzept und bietet eine andere Herangehensweise. Hat aber mit Ruby-Blöcken genau soviel am Hut wie `with`birkenfeld hat geschrieben: Ich halte first-class-Funktionen hier durchaus für ausreichend, und vor allem, mit Pythons Syntax vereinbar.
Ich verstehe nun wirklich nicht, was an
Code: Alles auswählen
3.times { |i| print i }
Code: Alles auswählen
times(3, lambda i: print(i))
Schlag doch mal eine Syntax für Blöcke vor, dann sehen wir schonpoker hat geschrieben:Aber weshalb Blöcke in Python nicht gehen, müsstest du mir erklären. (Ja, Armin sagte schon wegen der Einrückungen, aber was genau verhindert das?)
Ehm, Georg Brandl?Y0Gi hat geschrieben:Wer ist Reinhold?poker hat geschrieben:Du, Reinhold, [...]
http://www.google.de/search?aq=t&oq=&hl ... uche&meta=
Ich dachte das wäre bekannt Er ist ja schon ein par tage im Core Team, damals noch unter seinem richtigen Namen.
[OT]Aber sag mal Reinhold, wie bist du auf Georg Brandl gekommen?[/OT]
Gerne. Zugegeben, der satz ist ein wenig schwamig von mir, aber wenn ich mal näher ausgeführt habe, kann man das darauf herleiten.Y0Gi hat geschrieben:Mag mir das mal jemand erklären?poker hat geschrieben:Das first-class-functions in Ruby (wegen dem Objektsystem.) nicht möglich ist, ist klar.
Gib mir mal ein Augenblick. Ich schreibe dazu ein par Beispiele damit man das visuell nachvollziehen kann
hi Yogi.Y0Gi hat geschrieben:Mag mir das mal jemand erklären?poker hat geschrieben:Das first-class-functions in Ruby (wegen dem Objektsystem.) nicht möglich ist, ist klar.
Als erstes ist wichtig zu wissen, das Ruby total OOP ist. Dann muss man begreifen das man auf Attribute (~Variabeln) nicht zugreifen kann von außen. Solche Zugriffe werden über Methoden forciert Wo wir auch schon die Antwort darauf haben warum bei Ruby die Klammern optional sind.
Aber der Reihe nach:
Folgendes geht nicht
Code: Alles auswählen
class MyClass
def initialize
@eggs = [NIL, 1]
end
end
c = MyClass.new
c.eggs
Nur die Instanz selbst hat zugriff auf seine Instanzvariablen. Außerhalb kann man nur über Methoden darauf zugreifen:test.rb:8: undefined method `eggs' for #<MyClass:0x29406f4 @eggs=[nil, 1]> (NoMe
thodError)
Code: Alles auswählen
class MyClass
def initialize
@eggs = [NIL, 1]
end
def eggs
@eggs
end
def eggs=(value)
@eggs = value
end
end
c = MyClass.new
p c.eggs
c.eggs = 1
p c.eggs
c.eggs=(42)
p c.eggs()
Hier kann man auch schon sehen wie Ruby Arbeitet. ein `c.eggs` oder `c.eggs()` ruft die Methode lesend auf. Ein `c.eggs = ` oder `eggs=()` währe dann eine Forcierung einer Zuweisung.[nil, 1]
1
42
Da obere Möglichkeit zu viel Schreibkram ist, nur für Variablen die man nur lesen oder etwas zuweisen möchte, gibt es dafür auch eine Kurzform:
Code: Alles auswählen
class MyClass
attr_accessor :eggs
def initialize
@eggs = [NIL, 1]
end
end
So, aufgrund dieses OOP-Designs hat man sich dann entschieden klammern optional zu machen. Aber durch diese Entscheidung, ist es nicht möglich Funktionen "direkt" (=über ihren Namen) als Referenzen rumzureichen. Das heißt aber nicht das Ruby nicht Funktionen höherer Ordnung unterstützt IN Ruby muss man halt vorhandenen Funktionen (eigentlich Methoden, den Funktionen gibt es in dem Sinne nicht) in proc-objects umwandeln um sie rum zureichen.
Auch kann man für anonyme Funktionen in ruby Blöcken verwenden (Insofern hat birkenfeld mit seiner Aussage auch irgendwie recht. Er bedenkt aber nicht das Blöcke noch weiter mehr machen können als er in seinem Trivial beispiel zeigt).
folgendes Python Beispiel
Code: Alles auswählen
def foo():
return 42
def bar(f):
foo()
bar(foo)
Code: Alles auswählen
def foo()
42
end
def bar(f)
f.call
end
p bar(self.method(:foo))
/e
Huh? Ich dachte, 'birkenfeld' wäre der Nickname gewesen und er hat sich dann entschieden, Python unter seinem echten Namen weiter zu entwickeln... und einige Mailinglist-Archive bestätigen mir das offenbar auch. Nur, dass es einen imaginären Vornamen gab, war mir noch nicht bekannt.poker hat geschrieben:Ehm, Georg Brandl?Y0Gi hat geschrieben:Wer ist Reinhold?poker hat geschrieben:Du, Reinhold, [...]
http://www.google.de/search?aq=t&oq=&hl ... uche&meta=
Ich dachte das wäre bekannt Er ist ja schon ein par tage im Core Team, damals noch unter seinem richtigen Namen.
poker: Danke für die Aufklärung.
Der Accessor-Kram ist mir bekannt gewesen.
Jetzt wo du's beschreibst, meine ich mich daran zu erinnern, mal über diesen umständlichen Weg gelesen zu haben, über den man direkt auf die Funktionen und Methoden als Objekte in Ruby zugreifen kann.
Ich persönlich schätze auch leere Klammern beim Funktionsaufruf, weil sie genau diesen kennzeichnen. Nun, das ist wohl der Preis, den man (vielleicht anfangs nichts ahnend) bei Rubys Entwicklung bezahlen musste, um (zugegeben, öfter) ein paar Zeichen weniger tippen zu können.
Du meinst hier nicht zufällig folgendes?poker hat geschrieben: folgendes Python BeispielCode: Alles auswählen
def foo(): return 42 def bar(f): foo() bar(foo)
Code: Alles auswählen
def foo():
return 42
def bar(f):
f() # <--
bar(foo)