Bevor wir darüber nachdenken, ob wir Java oder Python lernen sollen, sprechen wir über die Anwendungsbereiche beider.
Die Hauptanwendungsrichtungen von Python:
1. Wissenschaftliches Rechnen
Mit NumPy, SciPy, Matplotlib, Enthoughtlibrarys, usw. Mit der Entwicklung vieler Programmbibliotheken eignet sich Python zunehmend für wissenschaftliche Berechnungen und das Zeichnen hochwertiger 2D- und 3D-Bilder. Im Vergleich zu Matlab, der beliebtesten kommerziellen Software im Bereich des wissenschaftlichen Rechnens, ist Python eine allgemeine Programmiersprache. Sie verfügt über ein breiteres Anwendungsspektrum als die von Matlab verwendete Skriptsprache und wird von mehr Programmbibliotheken unterstützt. Obwohl viele erweiterte Funktionen und Toolboxen in Matlab immer noch unersetzlich sind, gibt es in der täglichen wissenschaftlichen Forschung und Entwicklung immer noch viele Aufgaben, die mit Python erledigt werden können.
2. Webcrawler
, auch Webspider genannt, sind die zentralen Tools für die Datenerfassung in der Big-Data-Branche. Ohne Tag und Nacht automatisierte Webcrawler und das hochintelligente Crawlen kostenloser Daten im Internet gäbe es wahrscheinlich drei Viertel weniger Unternehmen mit Bezug zu Big Data. Es gibt viele Programmiersprachen, die zum Schreiben von Webcrawlern verwendet werden können, aber Python gehört definitiv zu den Mainstream-Sprachen und sein Scripy-Crawler-Framework ist weit verbreitet.
3. Datenanalyse
Basierend auf einer großen Datenmenge, kombiniert mit wissenschaftlichem Rechnen, maschinellem Lernen und anderen Technologien, werden die Daten bereinigt, dedupliziert, standardisiert und Gezielte relevante Analysen sind der Grundstein der Big-Data-Branche. Python ist eine der Mainstream-Sprachen für die Datenanalyse.
4. Künstliche Intelligenz
Python ist eine gängige Programmiersprache für maschinelles Lernen, neuronale Netze, Deep Learning usw. im großen Bereich der künstlichen Intelligenz und weit verbreitet Support und Anwendungen.
Die Hauptanwendungsrichtungen von Java:
1. Anwendungen auf Unternehmensebene
Dies ist derzeit die am weitesten verbreitete Java-Anwendung Auf diesem Gebiet ist es nahezu einzigartig. Die Bereiche umfassen verschiedene Branchenanwendungen, Unternehmensinformatisierung und E-Government usw. und umfassen: Büroautomation OA, Kundenbeziehungsmanagement CRM, Personalwesen HR, Unternehmensressourcenplanung ERP, Wissensmanagement KM, Lieferkettenmanagement SCM, Unternehmensausrüstungsmanagement System-EAM, Produktlebenszyklusmanagement PLM, serviceorientierte Architektur SOA, Business Intelligence BI, Projektmanagement PM, Marketingmanagement, Prozessmanagement WorkFlow, Finanzmanagement ... und so weiter, fast alle Anwendungen, die Sie sich vorstellen können.
2. Eingebettete Geräte und Unterhaltungselektronikprodukte
Einschließlich drahtloser Handgeräte, Smartcards, Kommunikationsterminals, medizinische Geräte, Informationsgeräte (wie digitale Fernseher, Set-) Topboxen, Kühlschränke), elektronische Automobilausrüstung usw. sind in den letzten Jahren beliebte Java-Anwendungsbereiche, insbesondere Java-Anwendungen und Java-Spiele auf Mobiltelefonen, die noch beliebter sind.
Als nächstes vergleichen wir kurz Python und Java:
Statische Sprache und dynamische Sprache:
Statische Sprache :
Java, C, C++, Go usw.
Stark typisierte Sprache (statisch typisierte Sprache) bezieht sich auf eine Sprache, die eine Variablen-/Objekttypdeklaration erfordert und im Allgemeinen eine Kompilierung und Ausführung erfordert. Eine stark typisierte Sprache ist eine Sprache, in der der Typ einer Variablen, sobald sie bestimmt ist, nicht mehr konvertiert werden kann.
Dynamische Sprachen :
Python, Javascript, PHP, Ruby usw.
Schwach typisierte Sprache (dynamisch typisierte Sprache) bezieht sich auf eine Sprache, die keine Variablen erfordert /object-Typdeklaration. Im Allgemeinen ist keine Kompilierung erforderlich (es gibt jedoch auch kompilierte Versionen). Dynamisch typisierte Sprachen sind Sprachen, in denen Datentypen zur Laufzeit ermittelt werden. Vor der Verwendung einer Variablen ist keine Typdeklaration erforderlich. Normalerweise ist der Typ der Variablen der Typ des Werts, dem sie zugewiesen ist.
Im Gegensatz dazu wird in schwach typisierten Sprachen der Typ einer Variablen durch ihren Anwendungskontext bestimmt.
Vorteile der statischen Sprache:
Aufgrund der obligatorischen Typdeklaration verfügt die IDE bei der Implementierung komplexer Geschäftslogik über ein starkes Codebewusstsein Bei der Entwicklung großer kommerzieller Systeme und Anwendungen mit langen Lebenszyklen kann die Systementwicklung durch die Verwendung von IDEs sichergestellt werden.
Da statische Sprachen relativ geschlossen sind, kann das Eindringen von Entwicklungskits von Drittanbietern in den Code minimiert werden.
Vorteile der dynamischen Sprache:
Einige fortgeschrittene Konzepte in statischer Sprache, wie Reflexion in Java und AOP basierend auf Reflexion, diese Konzepte sind für Java-Anfänger und For nützlich Für Menschen mit nur ein oder zwei Jahren Berufserfahrung ist es schwierig, diese Konzepte zu verstehen, geschweige denn, wie man sie selbst umsetzt. Wenn Sie AOP verwendet haben, werden Sie verstehen, dass es schwierig ist, diese Konzepte kompetent zu verstehen und anzuwenden, und dass die Entwicklungseffizienz relativ gering sein wird. Obwohl die Schüler vielleicht sagen: „Es ist tatsächlich sehr einfach zu verwenden“, liegt das möglicherweise daran, dass Sie es tun habe noch nie Dekoratoren in dynamischen Sprachen verwendet.
In dynamischen Sprachen kann das Konzept von AOP in Java direkt mithilfe von Dekoratoren vervollständigt werden und ist Teil der Python-Sprache selbst. Es ist nicht wie bei Java, dass zur Fertigstellung die Einführung eines Dritten erforderlich ist.
Python kann dies einfach erreichen, da Python eine dynamische Sprache ist. Die Eigenschaften dynamischer Sprachen machen es für jeden äußerst einfach, die Initialisierung der gesamten Klasse zu steuern und Objekte dynamisch zu ändern Für dynamische Sprachen ist die Flexibilität einfacher als bei statischen Sprachen.
Interpretierte und kompilierte Sprachen
Die Interpretationsausführung bezieht sich hier auf die Kompilierungsausführung. Wir alle wissen, dass in kompilierten Sprachen wie C/C++ geschriebene Programme aus Quelldateien in die vom Computer verwendete Maschinensprache konvertiert und dann über einen Linker verknüpft werden müssen, um eine binäre ausführbare Datei zu bilden. Wenn Sie dieses Programm ausführen, können Sie das Binärprogramm von der Festplatte in den Speicher laden und ausführen.
Der Ausführungsprozess von Python ähnelt dem von Java:
Der Python-Interpreter konvertiert den Quellcode in Bytecode, und dann führt der Python-Interpreter diese Bytecodes aus.
Ein spezifischer Python-Programmausführungsprozess:
- Nach der Ausführung des Python-Programms wird der Python-Interpreter gestartet und dann wird das Python-Programm in einen Bytecode kompiliert objectPyCodeObject.
- Während der Laufzeit ist das Kompilierungsergebnis, bei dem es sich um das PyCodeObject-Objekt handelt, nur im Speicher vorhanden. Wenn der Python-Code dieses Moduls ausgeführt wird, wird das Kompilierungsergebnis beim nächsten Mal in der Pyc-Datei gespeichert Es ist kein Kompilieren erforderlich, es wird direkt in den Speicher geladen. Eine Pyc-Datei ist lediglich eine Darstellung eines PyCodeObject-Objekts auf der Festplatte.
– Dieses PyCodeObject-Objekt enthält Zeichenfolgen, konstante Werte im Python-Quellcode und Bytecode-Anweisungen, die durch Syntaxanalyse kompiliert und generiert wurden. Das PyCodeObject-Objekt speichert auch die Entsprechung zwischen diesen Bytecode-Anweisungen und der ursprünglichen Codezeilennummer, sodass es beim Auftreten einer Ausnahme angeben kann, welche Codezeile sich befindet.
Java wird auch zuerst in Bytecode kompiliert und dann vom
-Interpreter ausgeführt. Java ist etwas ganz Besonderes, aber es wird nicht direkt in Maschinensprache kompiliert, sondern in Bytecode. Der Bytecode wird dann interpretiert auf der Java Virtual Machine ausgeführt. Python verwendet ebenfalls eine ähnliche Methode. Python wird zunächst in Python-Bytecode kompiliert, und dann ist ein spezieller Python-Bytecode-Interpreter für die Interpretation und Ausführung des Bytecodes verantwortlich.
GIL in Python
Der vollständige Name von GIL ist Global Interpreter Lock (Global Interpreter Lock). Die Quelle ist die Überlegung zu Beginn des Python-Designs erfolgt aus Gründen der Datensicherheit.
Unter Python-Multithreading ist die Ausführungsmethode jedes Threads:
1. Erhalten Sie GIL
2 Führen Sie den Code aus, bis er in den Ruhezustand versetzt wird oder die virtuelle Python-Maschine ihn anhält.
3. Geben Sie die GIL frei
Wenn ein Thread ausgeführt werden soll, muss er zuerst die GIL erhalten. Wir können uns die GIL als „Durchlauf“ vorstellen, und zwar in einem Python-Prozess , es gibt nur eine GIL. Threads, die keinen Pass erhalten können, dürfen die CPU nicht zur Ausführung betreten.
Jedes Mal, wenn die GIL-Sperre aufgehoben wird, konkurrieren Threads um Sperren und wechseln Threads, was Ressourcen verbraucht. Und aufgrund der GIL-Sperre kann ein Prozess in Python nur einen Thread gleichzeitig ausführen (der Thread, der die GIL erhalten hat, kann ausgeführt werden. Aus diesem Grund ist die Multithreading-Effizienz von Python auf Multi-Core-CPUs nicht hoch).
Jeder Prozess verfügt über eine eigene unabhängige GIL und stört sich nicht gegenseitig, sodass er im wahrsten Sinne des Wortes parallel ausgeführt werden kann. Daher ist die Ausführungseffizienz von Multiprozessen in Python besser als die von Multiprozessen. Threading (nur für Multicore-CPUs).
Aufgrund der Existenz von GIL ist die Multi-Threading-Leistung von Python sehr gering und kann die Vorteile von Multi-Core-CPUs nicht nutzen, und ihre Leistung ist sogar noch schlechter als die von Single-Threading. Wenn Sie also eine Multi-Core-CPU verwenden möchten, empfiehlt sich die Verwendung von Multiprozessen oder Coroutinen.
Python Garbage Collection
Wenn es um Garbage Collection geht, wird normalerweise das Referenzzählmodell verwendet, das die intuitivste und einfachste Garbage Collection-Technologie darstellt. Python verwendet auch die Referenzzählung, aber die Referenzzählung weist folgende Mängel auf:
1. Eine häufige Aktualisierung der Referenzzählung verringert die Betriebseffizienz
2. Die Referenzzählung kann das Zirkelreferenzproblem nicht lösen
Basierend auf dem Referenzzählmechanismus verwendet Python zwei gängige Garbage-Collection-Technologien: Mark-Clearance und Generational Collection.
Der obige Inhalt dient nur als Referenz!
Empfohlenes Python-Video-Tutorial: Python-Video-Tutorial
Empfohlenes Java-Video-Tutorial: JAVA-Video-Tutorial
Das obige ist der detaillierte Inhalt vonHaben Sie PHP gelernt, bevor Sie Java oder Python gelernt haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!