Für welche Arten von Anwendungen ist Python eine schlechte Wahl? [geschlossen]

21

Ich habe gerade angefangen, Python zu lernen und möchte mehr über die Sprache erfahren.

Mir ist klar, dass Python in vielen Fällen eine langsame Sprache im Vergleich zu C oder C ++ ist. Daher ist Python wahrscheinlich nicht die beste Wahl für Anwendungen, die so schnell wie möglich ausgeführt werden müssen.

Abgesehen davon scheint Python eine großartige Allzwecksprache zu sein, die leicht zu lesen und zu schreiben ist. Die verfügbaren Bibliotheken bieten eine enorme Menge an Funktionen. Wo ist es eine schlechte Wahl, Python zu verwenden (und warum), abgesehen von leistungskritischen Anwendungen?

Casey Patton
quelle
8
Es gibt keine großartige Allzwecksprache. Etwa alle fünf Jahre ersetzt ein neuer den alten, der nur in Nischenmärkten überlebt. Lisp, Fortran, Pascal, Basic, Ada, Perl ...
mouviciel
3
@mouviciel: Pascal eine Nischensprache? Okay, sein Name wurde in Delphi geändert, um mit der Borland / CodeGear / Embarcadero-IDE übereinzustimmen, aber Delphi ist immer noch (basierend auf) Pascal und obwohl es Marktanteile verloren hat, würde ich es nicht genau als Nischensprache bezeichnen. Und auch nicht Basic. Visual Basic ist noch Basic. Sowohl Delphi als auch Visual Basic werden in vielen Unternehmen verwendet ...
Marjan Venema
7
"Python ist eine langsame Sprache im Vergleich zu C oder C ++". Sie sollten dies mit dem von Ihnen verwendeten Benchmark sichern. In einigen Fällen (E / A-gebundene Programme, die viele Systemaufrufe ausführen) ist Python so schnell wie C, da es nur ein Wrapper um die C-Bibliothek ist.
S.Lott
@ S.Lott True, und PyPy kann manchmal Rivalen der JVM oder sogar C / C ++
Yati Sagade
Pascal war die Unterrichtssprache der Wahl, als ich an der Universität war. Dann flogen ein paar Jahrzehnte vorbei und jetzt kommt es ihr Java vor. Ich programmiere mehrere Sprachen professionell (etwa ein halbes Dutzend), aber ich programmiere Delphi trotzdem zum Spaß.
Mawg

Antworten:

22

Software für eingebettete Ziele mit begrenzten Ressourcen. Die meisten Prozessoren auf diesem Planeten können Python entweder aufgrund unzureichender Ressourcen nicht ausführen, oder niemand hat eine Version auf diese Architektur portiert. Die meisten Prozessoren sind bereits mit weniger als einem Megabyte Arbeitsspeicher ausgestattet.

uɐɪ
quelle
... das ist, bis jemand eine Python-Portierung von Arduino macht. Oh, Moment mal!
Spoike
5
@Spoike dieser Link ist für die Ausführung von Python auf dem Computer und nur serielle Kommunikation mit Arduino. Arduino führt keinen Python-Code aus
basarat
1
@BasaratAli: Haftungsausschluss - Ich schrieb meinen Kommentar im Scherz. ;-)
Spoike
14

Die zwei Orte, die mir in den Sinn kommen, sind Dinge, die viel Parallelität erfordern, für die ich Erlang verwenden würde. Oder schwere numerische Berechnung, die ich wahrscheinlich versuchen würde, Fortran zu verwenden.

Zachary K
quelle
1
Ist Fortran in der numerischen Berechnung noch vor C / C ++? ...
Sardathrion - Reinstate Monica
1
Du weißt, ich weiß es nicht. Es ist kein Bereich, in dem ich viel Erfahrung habe. Aber ich weiß, dass die Fortraner über 30 Jahre damit verbracht haben, ihre Werkzeuge wirklich schnell zu entwickeln.
Zachary K
@Sardathrion - Es ist schwer zu sagen. Nur natürlich, verstehst du? Vor ein paar Monaten gab Lionel von Intel Fortran bekannt, dass seine Fortran-Produktlinie jedes andere Produkt in seiner Entwicklungslinie übertrifft (was nicht so eng ist).
Turm
@Idigas: In der Tat weiß ich, dass Fortran in großem Umfang verwendet wird, aber das könnte an Legacy-Code und nicht an Optimierungsbeschränkungen liegen. Vielleicht sollte ich das als Frage stellen ...
Sardathrion - Reinstate Monica
Denken Sie auch daran, dass viele Leute, die numerische Berechnungen durchführen, Fortran sehr gut kennen und es das Werkzeug ihrer Wahl ist. Wenn sie diese Art von Aufgabe haben, werden sie nach Fortran greifen.
Zachary K
8

Da es sich bei Python um eine dynamisch typisierte Sprache handelt, ohne dass die Kompilierungszeit überprüft werden muss, ist es schwierig, ein großes Python-Projekt ohne umfangreiche Komponententests umzugestalten.

Wenn Sie also ein großes Projekt haben, das über einen längeren Zeitraum gewartet und geändert werden muss, und Ihr Team nicht die Absicht hat, automatisierte Tests für alles zu erstellen, empfiehlt es sich möglicherweise, Java oder C # zu verwenden.

Eric Wilson
quelle
17
Das Refactoring eines großen Projekts ohne Komponententests ist sehr schwierig.
Sardathrion
9
Richtig, aber ohne Typensicherheit viel härter.
Eric Wilson
3
@ Eric Wilson - Selbst dann kann starkes Tippen Ihnen ein falsches Gefühl der Sicherheit geben ... Es kompiliert,
Mark Booth
2
Dies ist möglicherweise nicht zu 100% das Thema der Frage, aber immer noch ein gültiger Punkt. Die Toolunterstützung, insbesondere das Refactoring für dynamisch typisierte Sprachen, fehlt im Vergleich zu Sprachen wie Java oder C #. Das Umbenennen von Inhalten kann in großen Python-Projekten eine erschöpfende Aufgabe sein.
OliverS
Benötigt Python eine separate Laufzeit oder VM oder kann es eine einzelne eigenständige ausführbare Datei generieren?
Jim In Texas
2

Wenn das Hauptaugenmerk auf der Entwicklung von Windows-GUIs liegt, würde ich CPython empfehlen, da es an guten Formulardesignern mangelt (im Vergleich zur Verwendung von .Net).

IronPython wird jedoch unter .NET ausgeführt, und Sie haben zwei IDEs mit Formulardesignern zur Auswahl: Visual Studio und SharpDevelop. Tatsächlich können die Python-Tools für Visual Studio sowohl für CPython als auch für IronPython verwendet werden, was ziemlich ordentlich ist, obwohl ich es noch nicht ausprobiert habe ...

AndyHasIt
quelle
2

Das hängt wirklich davon ab, was Sie mit "schlechte Wahl" meinen.

Wenn Sie Anwendungen meinen, bei denen die Verwendung von Python sehr schwierig ist, dann gibt es relativ wenige: Die wichtigste, die in den Sinn kommt und noch nicht erwähnt wurde, ist Code, der ein hohes Maß an Korrektheit erfordert, wenn Sprachen mit ausgeklügelten Schriftsystemen (Haskell, abhängig von der Typisierung der Sprachen) verwendet werden ) sind bessere Möglichkeiten.

Wenn Sie Anwendungen meinen, bei denen Python nicht optimal ist (das heißt, es gibt bessere Auswahlmöglichkeiten), dann gibt es mehr, aber sie sind auch subjektiver. Zum Beispiel ist die Arbeit an Compilern und Interpreten nach meiner zugegebenermaßen begrenzten Erfahrung mit algebraischen Datentypen, Pattern-Matching und funktionaleren Funktionen viel einfacher als in Python. Eine vollständige Auflistung derartiger Anträge ist jedoch nicht möglich, da sie pro Person variieren.

Tikhon Jelvis
quelle
2

Es ist aufgrund seiner Ausdrucksfähigkeit und der Vielzahl von Unterstützungsbibliotheken ideal für die schnelle Skripterstellung.

Die dynamische Typprüfung und das Fehlen einer expliziten Variablendeklaration machen es zu einer schlechten Wahl für große Projekte, an denen Hunderttausende oder sogar Millionen von Codezeilen beteiligt sind. Das Gleiche gilt für unternehmenskritische oder sicherheitskritische Systeme. In einem Avioniksystem wäre es zum Beispiel völlig inakzeptabel, wenn ein System aufgrund eines Fehlers ausfallen würde, der zur Kompilierungszeit abgefangen werden könnte.

Mike Collins
quelle
0

Genau wie du fange ich auch gerade mit Python an. Aber für mich im Kontext von maschinellem Lernen und Data Science.

Ich habe mir auch gerade alle neuen Kenntnisse in Java 8 und seinen neuen streamorientierten Bibliotheken angeeignet.

Ich habe das flüssige Gefühl der neuen Java 8-Stream-Bibliotheken wirklich geliebt und wie nah es sich anfühlte, wenn ich Apache-Spark-Bibliotheken verdanke. Als ich zu Python kam, erwartete ich das Gleiche und noch mehr.

Ich habe mehr gesehen. Aber viel weniger. Schlechte Dokumentation, obwohl reichlich vorhanden; keine Fließfähigkeit, und tatsächlich ließ ich die Vermutung, ob eine Methode ein neues Objekt regiert oder auf dieses einwirkt; Nichts in der Nähe einer Karte / Verkleinerung usw. Ich war überrascht, enttäuscht zu sein.

Von Anfang an hatte ich jedoch keine großen Erwartungen, wie einfach es sein würde, Sprache zu lernen. Ich hatte recht: inkonsistent, nicht intuitiv, schwer zu lernen. Aber das war nur meine Erfahrung, in allem, was Java mag, ziemlich gut zu sein.

YoYo
quelle