Java vs. Python

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.
Dragonfire
User
Beiträge: 22
Registriert: Dienstag 28. Februar 2012, 09:03

Im Internet gibt es viele Seiten die Java mit Python vergleichen, wie z.B.:
http://twistedmatrix.com/users/glyph/ra ... -java.html
oder
http://pythonconquerstheuniverse.wordpr ... nd-python/
(wenn wer neueres hat immer her damit ;) )

Aufgrund eines postest
lunar hat geschrieben:[...] falls Du mit "typisierten Sprachen" "Java" oder "C#" meinst (Python ist auch typisiert), dann vergiss am besten auch erstmal alles, was Du in diesen Sprachen übers Programmieren gelernt hast. Python unterscheidet sich sehr stark von Java.
würde mich mal interessieren was JAVA so stark von Python unterscheidet ...

Die Syntax ist ein wenig anders,
ist halt einen Interpreter (wobei es gibt ja Jython),
Generatoren und Lambda Ausdrücke gibt es ...
Python unterstützt Mehrfachvererbung ...

Was sind für euch essentielle Punkte?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Der Interpreter ist übrigens kein Unterscheidungsmerkmal in vielerlei Hinsicht. Java wird in einen Bytecode kompiliert, welcher dann von einer sogenannten virtuellen Maschine interpretiert wird. Gleiches gilt auch für Python! Jython besteht im Kern "lediglich" aus einem Compiler, der Python Quellcode in Bytecode der JVM (Java virtual machine) übersetzt. CPython, also die Referenz Python Implementierung, umfasst eine eigene virtuelle Maschine und demzufolge ein eigenes Bytecodeformat.

Die wichtigen Unterscheidungsmerkmale finden sich in den Paradigmen. Python bietet über das OOP hinaus andere Paradigmen, wie etwa funktionale Programmierung.

Bei der Typisierung ist Python "dynamisch", Java "statisch" - beide sind jedoch "stark" typisiert.

Man kann auch Unterscheidungen hinsichtlich von Prinzipien finden, etwa dem "Duck-Typing" oder "EAFP" (http://wiki.python.de/Allgemeine%20Begriffe).

Alles in allem gibt es viele Unterschiede - natürlich lassen sich auch Gemeinsamkeiten finden. Aber letztlich trifft das auf jede Kombination von Programmiersprachen zu ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Dragonfire
User
Beiträge: 22
Registriert: Dienstag 28. Februar 2012, 09:03

"duck-typing" kannte ich noch nicht ...
EAFP als Prinzip kann man auch in JAVA umsetzen ...
BlackJack

@Dragonfire: Man kann EAFP in Java umsetzen, das macht man aber nicht. Der Laufzeitunterschied zwischen Prädikattest/Methodenaufruf und Ausnahmebehandlung ist in den typischen Java-Implementierungen stärker als bei Python, und bei Java fällt eine ganze Klasse an Situationen weg, wo man in Python üblicherweise auf EAFP setzt: Typtests. Durch Java's statische Typisierung kommt man selten in die Versuchung zur Laufzeit auf einen Typ testen zu wollen.
Benutzeravatar
snafu
User
Beiträge: 6745
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

EAFP versuche ich auch in Python, möglichst zu vermeiden, da mir Codestücke, die auf Ausnahmebehandlung beruhen, oft etwas "unscharf" erscheinen. Testet man hingegen explizit auf eine bestimmte Bedingung, dann wird das Ganze IMHO wesentlich sprechender und man kann sich mögliche Kommentare, die man bei der Ausnahmebehandlung in einen `except`-Pfad schreiben würde, sparen.

Klar, es gibt Besonderheiten wie Race-Conditions (z.B. bei Dateioperationen), wo man mit einem `try`-`except`-Konstrukt besser beraten ist. Auch möchte sicherlich niemand ernsthaft den `import`-Mechanismus nachbauen, nur um auf das Vorhandensein eines Moduls ohne Verwendung von `try` zu testen. Nichtsdestotrotz finde ich übermäßige Ausnahmebehandlung in aller Regel eher unschön.

Naja, und das Testen auf Vorhandensein einer Methode erübrigt sich in Java (wie schon gesagt wurde), da grundsätzlich aufgrund des (Ober-)Typs bekannt sein sollte, welches öffentliche Interface einem durch das Objekt angeboten wird. In Python kann ja prinzipiell erstmal alles übergeben werden und dann guckt man mal (etwas polemisch ausgedrückt) was die Methode oder Funktion damit anstellt... ;)
Benutzeravatar
snafu
User
Beiträge: 6745
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dragonfire hat geschrieben:Im Internet gibt es viele Seiten die Java mit Python vergleichen, wie z.B.:
http://twistedmatrix.com/users/glyph/ra ... -java.html
Diesen Link würde ich mit äußerster Vorsicht genießen: Da wird Python 1.5 mit JDK 1.1 verglichen. Nach heutigen Maßstäben ist das schon fast antik. Inzwischen dürfte es mit ziemlicher Sicherheit so sein, dass Java grundsätzlich schneller als Python ist (entsprechende Programmierkenntnisse vorausgesetzt). Zu den Anfängen von Java war es nämlich tatsächlich so, dass die Sprache (bzw deren Implementation) noch vergleichsweise langsam war.

Generell würde ich aber eh nicht soviel auf Performance-Vergleiche geben. Die spürt man in der Praxis meistens eh nicht. Bei besonders berechnungsintensiven Programmen sei in Bezug auf Python auf entsprechend optimierte (externe) Bibliotheken verwiesen, die in einer schnelleren Sprache implementiert sind und ein Python-Interface anbieten (z.B. Numpy). In wieder anderen Situationen (z.B. bei vielen Festplattenzugriffen) hilft nicht selten Caching, was einem teilweise auch durch diverse "themenspezifische" Frameworks abgenommen werden kann, um spürbare Verzögerungen zu vermeiden.

Mein Tipp: Guck einfach durch Ausprobieren beider Sprachen, womit du am besten klarkommst und gib nicht allzu viel auf solche "Testberichte". Falls noch nicht bekannt, möchtest du dir vielleicht mal Scala angucken, welches vollständig Java-kompatibel ist, aber dennoch sehr viele Vereinfachungen mit sich bringt. Scala ist sozusagen ein Java in weniger geschwätzig.
Dragonfire
User
Beiträge: 22
Registriert: Dienstag 28. Februar 2012, 09:03

Genau das ist mein Problem ...
mich interessieren nicht Performanceunterschiede,
oder Syntaxunterschiede sondern generell Konzepte Prinzipien,
in denen sich die Sprachen deutlich unterscheiden ...

###

Schon mal ein Dank an alle für die aufgeführten Dinge hier im Thread ...
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
snafu
User
Beiträge: 6745
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

jens hat geschrieben:http://wiki.python.de/Unterschiede%20zu%20Java sollte mal gefüllt werden ;)
Och, die jetzige Beschreibung ist doch eigentlich prägnant genug... ;)
Dragonfire
User
Beiträge: 22
Registriert: Dienstag 28. Februar 2012, 09:03

Genau das meine ich ...
es gibt Unterschiede ...
aber die scheinen sehr klein zu sein ...
oder Irre ich mich da?
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Nein, sind sie nicht. Es fühlt sich zum Beispiel wesentlich umständlicher an in Java zu programmieren (sieht man gut wenn man mittels OOP umgesetzte Projekte in beiden Sprachen vergleicht). Python erlaubt es hingegen wesentlich kürzere und prägnantere Programme zu schreiben und erlaubt zudem verschiedene Programmierparadigmen (insbesondere die funktionalen Bestandteile sind diesbezüglich sehr hilfreich).
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Was meinst du mit Unterschieden? Beide sind turing vollstaendig, mit beiden kann man alles Berechenbare ausdruecken.
Der Unterschied liegt darin _wie_ es ausgedrueckt wird. Bis du mit Kriterien herausrueckst ist die Frage analog zu "Was ist der Unterschied zwischen Deutsch und Suaheli? Nein, nicht die Worte, nicht die Grammatik, sondern der Unterschied!"

Die Unterschiede sind in meinen Augen sehr groß, machen sich aber nicht so sehr an der Sprache selbst fest, sondern wie sie benutzt wird, d.h. wie die Einschraenkungen von Java (ja, da gibt es sehr viele) und Python umgangen werden.

Was hier schon oft angedeutet wurde: Java hat eine andere Kultur als Python. Wenn dir der Unterschied, dass Java keine Funktionen (und schon gar keine hoeherer Ordnung) kennt, nicht so gross vorkommt, kann ich dir nicht helfen.
Dragonfire
User
Beiträge: 22
Registriert: Dienstag 28. Februar 2012, 09:03

Die Antwort war sehr hilfreich ...
Ich sollte meine Frage umformulieren ...

WAS FINDET IHR SIND DIE GRÖSSTEN UNTERSCHIEDE ZWISCHEN JAVA UND PYTHON ?

Jeder findet da andere Dinge ...
Mich interessiert was die Leute hier denken ...
alles andere kann man ja nachlesen xD
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich hatte da doch schon etliches genannt - bringt es Dir etwas, wenn andere Leute das noch mal wiederholen? Paradigmen, Typisierung, Zugriffskapselung ggf. noch und eben allgemein Idiome... alleine mit der ersten Klasse ergeben sich sehr viele Unterschiede; cofis Beispiel mit Funktionen folgt daraus z.B.

Die Frage ist doch, wie gut kennst Du Dich überhaupt mit der Materie aus? Es hilft Dir ja wenig, wenn Du die Schlagwörter nicht kennst... kennst Du allerdings deren Bedeutung, so sollte es sich Dir längst erschlossen haben, wie groß die Unterschiede sind ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

Grösster Unterschied für mich: In Python programmieren macht mir Spass. 8)
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

BlackJack hat geschrieben:Grösster Unterschied für mich: In Python programmieren macht mir Spass. 8)
:D

An den OP: Arbeite einfach mal das Python Tutorial durch und schau, ob du damit klarkommst. Etwas Entsprechendes für Java sollte es vermutlich auch geben, oder?
Dragonfire
User
Beiträge: 22
Registriert: Dienstag 28. Februar 2012, 09:03

mkesper hat geschrieben:An den OP: Arbeite einfach mal das Python Tutorial durch und schau, ob du damit klarkommst. Etwas Entsprechendes für Java sollte es vermutlich auch geben, oder?
Ich komme damit klar ...
ohne Klammern fühlt man sich so frei ;)

Es ging jetzt um Unterschiede die man nicht auf den ersten Blick sieht ...
und die ihr seht ...
Ich programmiere schon ein wenig in python und der Post von lunar (siehe #1) hat
mich nachdenklich gemacht ...
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Der größte Unterschied dürfte darin bestehen dass Java OOP vergewaltigt während Python es nicht tut.
Dragonfire
User
Beiträge: 22
Registriert: Dienstag 28. Februar 2012, 09:03

DasIch hat geschrieben:Der größte Unterschied dürfte darin bestehen dass Java OOP vergewaltigt während Python es nicht tut.
Vergewaltigt?
Was meinst du damit genau?
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Biite, hier lesen auch minderjährige mit …

Denkt denn keiner mal an die Kinder‽
Antworten