15/07/2017, c'est mon premier jour d'apprentissage de python.
Tout d'abord, python est un langage de développement très populaire en ce moment, et son fondateur est Guido Van Rossum. En ce qui concerne la situation actuelle, la popularité du langage python continue d'augmenter et il a dépassé C# pour se classer quatrième. Python prône l'élégance, la simplicité et la clarté et constitue un langage excellent et largement utilisé.
1. Python est un langage interprété qui change d'interprétation lors de l'exécution.
Tout d'abord, expliquez le compilateur. Il compile chaque instruction du programme source en langage machine et l'enregistre sous forme de fichier binaire. De cette façon, lorsqu'il est exécuté, la machine compile directement. le fichier binaire pour exécuter ce fichier, la vitesse d'exécution est très rapide. L'interprète est différent. Lorsque le programme est exécuté, l'interprète l'interprète un par un en langage machine pour que l'ordinateur l'exécute. Alors évidemment, la vitesse d’exécution n’est pas aussi rapide que celle du fichier compilé. C'est également parce que l'ordinateur ne peut pas reconnaître et exécuter directement le code que nous écrivons, il ne peut reconnaître que le langage informatique (c'est-à-dire les fichiers binaires).
Compilé VS interprété
Compilé
Avantages : Le compilateur dispose d'un processus de pré-compilation pour optimiser le code. Étant donné que la compilation n'est effectuée qu'une seule fois et n'a pas besoin d'être compilée à nouveau pendant l'exécution, l'efficacité d'exécution des langages compilés est très élevée. Il peut être exécuté directement sans l'environnement linguistique.
Inconvénients : Une fois que le compilateur a compilé le programme, si le code est modifié, il doit être recompilé. Lors de la compilation, le code machine est généré en fonction de l'environnement d'exploitation correspondant. Il y aura des problèmes lors de la transplantation entre différents systèmes d'exploitation. Il doit être compilé en différents fichiers exécutables en fonction de l'environnement du système d'exploitation à exécuter.
Interprété :
Avantages : Bonne compatibilité avec les plateformes, peut fonctionner dans n'importe quel environnement, La condition préalable est que l'interprète (machine virtuelle) est installé. Parce qu'il est interprété de manière dynamique, le programme lui-même est très flexible. Lors de la modification du code, vous n'avez pas à vous soucier de le modifier et de l'exécuter directement. Il peut être déployé rapidement et les mises à jour du programme ne nécessitent pas de maintenance d'arrêt.
Inconvénients : Chaque fois que le code est exécuté, il doit être accompagné du processus d'interprétation dynamique. Les performances ne sont pas aussi bonnes que celles des langages compilés.
Pourquoi Python plutôt que d'autres langages ?
C et Python, Java, C#, etc.
Langage C : Le code est compilé pour obtenir du code machine, qui est directement exécuté sur le processeur. contrôle le travail du CPU.
Autres langages : Le code est compilé pour obtenir le bytecode, la machine virtuelle exécute le bytecode et le convertit en code machine puis l'exécute sur le processeur
Python. et C Python est un langage développé à partir de C Développé
Pour l'utilisation : La bibliothèque de classes de Python est complète et simple à utiliser. Si vous souhaitez réaliser la même fonction, Python peut la résoudre avec 10 lignes de code, tandis que C. peut nécessiter 100 lignes ou plus
Pour la vitesse : Par rapport au C, la vitesse d'exécution de Python est nettement plus lente
Python et Java, C#, etc.
Pour utilisation : Linux original. Python, les autres langages ne l'ont pas ; les langages ci-dessussont disponibles Support de bibliothèque de classes très riche
Concernant la vitesse : Python peut être légèrement inférieur en vitesse
Il n'y a donc pas d'essentiel différence entre Python et les autres langages. Les autres différences sont : bon dans un certain domaine, riches talents et idées préconçues.
Types de Python
Cpython
La version officielle de Python, utilisant L'implémentation du langage C, l'implémentation CPython la plus largement utilisée, convertira le fichier source (fichier py) en un fichier de bytecode (fichier pyc), puis s'exécutera sur la machine virtuelle Python.
Jyhton
Implémentation Java de Python, Jython compilera dynamiquement le code Python en bytecode Java, puis s'exécutera sur la JVM.
IronPython
Implémentation C# de Python, IronPython compile le code Python en bytecode C# puis l'exécute sur le CLR. (Similaire à Jython)
PyPy (Spécial)
Python implémenté par Python, recompile le bytecode de Python en code machine.
RubyPython, Brython...
1. Langages de bas niveau et de haut niveau
Les programmes informatiques originaux étaient représentés par des séquences de 0 et 1. Les programmeurs utilisaient directement des instructions machine sans traduction. une entrée de poinçonnage peut être exécutée pour obtenir le résultat. Plus tard, afin de faciliter la mémoire, les instructions machine représentées par des séquences de 0 et 1 étaient toutes des symboles mnémoniques. Ces mnémoniques qui correspondaient un à un aux instructions machine sont devenus des instructions d'assemblage, et c'est ainsi qu'est né le langage assembleur. Les instructions machine et les instructions d'assemblage sont orientées machine et sont collectivement appelées langages de bas niveau. Parce qu'il s'agit d'un mnémonique d'instructions machine pour une machine spécifique, le langage assembleur ne peut pas être indépendant de la machine (architecture CPU spécifique). Mais le langage assembleur doit également être traduit en instructions machine avant de pouvoir être exécuté. Par conséquent, il existe également une méthode permettant de traduire le langage assembleur exécuté sur une machine en instructions machine exécutées sur une autre machine, à savoir la technologie d'assemblage croisé.
Le langage de haut niveau est un langage informatique qui part du point de vue de la pensée logique humaine. Le niveau d'abstraction est considérablement amélioré. Il doit être compilé en code cible sur une machine spécifique avant de pouvoir le faire. être exécutée. Une instruction en langage de haut niveau nécessite souvent plusieurs instructions machine pour être exécutée. La nature indépendante de la machine des langages de haut niveau est obtenue grâce aux compilateurs générant différents codes objets (ou instructions machine) pour différentes machines. Plus précisément, dans quelle mesure un langage de haut niveau doit-il être compilé ? Cela est lié à la technologie de compilation. Il peut être compilé en code cible directement exécutable, ou il peut être compilé en une représentation intermédiaire, puis obtenu par différentes machines et. Système à exécuter, cette situation nécessite généralement un environnement de support, comme le support d'un interpréteur ou d'une machine virtuelle. Les programmes Java compilés en bytecode puis exécutés par des machines virtuelles sur différentes plateformes en sont de bons exemples. Par conséquent, dire qu'un langage de haut niveau ne dépend pas de la machine signifie que le programme lui-même du langage de haut niveau reste inchangé sur différentes machines ou plates-formes, et que le code cible compilé par le compilateur s'adapte aux différentes machines. En ce sens, grâce au cross-assembly, certains assembleurs peuvent également réaliser la portabilité entre différentes machines, mais la portabilité obtenue grâce à cette approche est bien moins pratique et pratique que celle des langages de haut niveau.
2. Compilation et interprétation
La compilation consiste à traduire le programme source en code cible exécutable. La traduction et l'exécution sont distinctes. l'exécution du programme source est terminée une fois et aucun code objet stockable n'est généré. Ce n'est qu'une apparence. La plus grande différence entre les deux est la suivante : pour l'interprétation et l'exécution, le contrôle lors de l'exécution du programme appartient à l'interpréteur et non au programme utilisateur. Pour la compilation et l'exécution, le contrôle au moment de l'exécution appartient au programme utilisateur ; .
L'explication a de bonnes caractéristiques dynamiques et une bonne portabilité. Par exemple, elle peut changer dynamiquement le type de variables, modifier le programme et insérer de bonnes informations de diagnostic de débogage dans le programme pendant l'exécution de l'interprétation. transplanté sur un autre système, le programme peut s'exécuter sur le système sur lequel l'interpréteur est transplanté sans modification. Dans le même temps, l'interpréteur présente également de grands inconvénients, tels qu'une faible efficacité d'exécution et une grande occupation de l'espace, car non seulement de l'espace doit être alloué au programme utilisateur, mais l'interpréteur lui-même occupe également de précieuses ressources système.
Le compilateur compile chaque instruction du programme source en langage machine et l'enregistre sous forme de fichier binaire de cette manière, l'ordinateur peut exécuter directement le programme en langage machine au moment de l'exécution, ce qui permet à l'ordinateur d'exécuter le programme directement en langage machine. est très rapide ; et l'interprète n'interprète le programme qu'un par un en langage machine pour que l'ordinateur l'exécute, donc la vitesse d'exécution n'est pas aussi rapide que le programme compilé
.
Type compilé et type interprété. Regardons d'abord le type compilé. En fait, c'est la même chose que le langage assembleur : il existe également un programme chargé de la traduction pour convertir notre code source et générer le code exécutable correspondant. . Pour le dire de manière plus professionnelle, ce processus est appelé compilation, et le programme responsable de la compilation est naturellement appelé compilateur. Si le code du programme que nous écrivons est contenu dans un fichier source, alors généralement un fichier exécutable sera généré directement après la compilation et nous pourrons l'exécuter directement. Mais pour un projet plus complexe, afin d'en faciliter la gestion, nous disséminons généralement le code dans différents fichiers sources et l'organisons en différents modules. A ce moment, lors de la compilation de chaque fichier, un fichier objet (Object file) sera généré à la place du fichier exécutable mentionné précédemment. Généralement, la compilation d'un fichier source correspondra à un fichier cible. Le contenu de ces fichiers cibles est essentiellement du code exécutable, mais comme il ne s'agit que d'une partie de l'ensemble du projet, nous ne pouvons pas encore l'exécuter directement. Une fois tous les fichiers sources compilés, nous pouvons enfin « empaqueter » ces fichiers cibles semi-finis dans un fichier exécutable. Ce travail est complété par un autre programme, car ce processus semble inclure le code exécutable. Les fichiers cibles sont connectés et assemblés. , donc on l'appelle aussi un lien, et le programme responsable du lien s'appelle... on l'appelle un éditeur de liens. En plus de lier les fichiers cibles, l'éditeur de liens peut également disposer de diverses ressources, telles que des fichiers d'icônes, des fichiers son, etc. Il est également chargé de supprimer les codes en double redondants entre les fichiers cibles, etc., donc... c'est aussi assez fatigant . Une fois le lien terminé, nous pouvons généralement obtenir le fichier exécutable souhaité.
Ci-dessus, nous avons brièvement présenté les caractéristiques des langages compilés, regardons maintenant les langages interprétés. Oh, littéralement, « compiler » et « interpréter » signifient tous deux « traduction », mais la différence réside dans le moment de la traduction. Par exemple : si vous envisagez de lire un livre étranger et que vous ne connaissez pas la langue étrangère, vous pouvez alors trouver un traducteur et lui donner suffisamment de temps pour traduire le livre entier du début à la fin, puis traduire le livre en langue maternelle. la version vous est donnée à lire ; ou bien, vous pouvez immédiatement demander à ce traducteur de vous aider à lire, et de le laisser vous la traduire phrase par phrase. Si vous souhaitez revenir sur un certain chapitre, il devra la traduire. encore pour toi.
Deux méthodes, la première est équivalente au type compilé que nous venons de mentionner : convertir tout le code en langage machine d'un coup, puis l'écrire dans un fichier exécutable et la seconde est équivalente à quoi ; nous voulons dire Type interprété : au moment avant l'exécution du programme, il n'y a que le programme source et aucun programme exécutable ; et chaque fois que le programme exécute une certaine instruction du programme source, il y aura un programme shell appelé interpréteur ; convertir le code source en binaire Le code est destiné à l'exécution. Bref, il est constamment interprété, exécuté, interprété, exécuté... Les programmes interprétés sont donc indissociables des programmes interprètes. Par exemple, le premier BASIC est un langage interprété classique. Pour exécuter un programme BASIC, vous devez entrer dans l'environnement BASIC, puis charger le fichier source du programme et l'exécuter. Dans un programme interprété, puisque le programme apparaît toujours sous forme de code source, la transplantation ne pose pratiquement aucun problème tant qu'il existe un interprète correspondant. Bien que le code source des programmes compilés puisse également être transplanté, la condition préalable est qu'ils doivent être compilés séparément pour différents systèmes. Pour les projets complexes, c'est en effet une tâche qui prend du temps, et il est très probable que certains détails doivent encore l'être. code modifié. De plus, les programmes interprétés sauvegardent l'étape de compilation et sont très pratiques pour la modification et le débogage. Ils peuvent être exécutés immédiatement après l'édition, vous n'avez pas à attendre patiemment le long processus de compilation. chaque fois que vous apportez de petits changements au processus de liaison. Cependant, tout a des avantages et des inconvénients. Puisque les programmes interprétés mettent le processus de compilation dans le processus d'exécution, cela détermine que les programmes interprétés sont destinés à être beaucoup plus lents que les programmes compilés.
Le type compilé et le type interprété présentent tous deux des avantages et des inconvénients. Le premier a une vitesse d'exécution de programme rapide et des exigences système inférieures dans les mêmes conditions. Par conséquent, il est utilisé lors du développement de systèmes d'exploitation, d'applications à grande échelle, de systèmes de bases de données, etc., tels que C/C++, Pascal/Object Pascal (Delphi). , VB et autres programmes de base. Tous peuvent être considérés comme des langages compilés, tandis que certains scripts Web, scripts de serveur et interfaces de développement auxiliaires, tels que les programmes qui n'ont pas d'exigences de vitesse élevée et ont certaines exigences de compatibilité entre différentes plates-formes système, sont généralement utilisés. langages interprétés, tels que Java et JavaScript, VBScript, Perl, Python, etc.
Mais comme les langages compilés et interprétés ont leurs propres avantages et inconvénients et s'opposent les uns aux autres, un certain nombre de langages émergents ont tendance à compromettre les deux. Par exemple, bien que le langage Java soit plus proche des caractéristiques. d'un langage interprété, il ne présente pas les caractéristiques d'un langage interprété avant exécution. Il a été précompilé au préalable, et le code généré est un code intermédiaire entre le code machine et le code source Java. Lors de son exécution, il est interprété et. exécuté par la JVM (la plateforme de machines virtuelles de Java, qui peut être considérée comme un interpréteur). Il conserve non seulement les caractéristiques élevées d'abstraction et de portabilité du code source, mais a également effectué la plupart du travail de précompilation du code source, de sorte qu'il s'exécute beaucoup plus rapidement que les programmes « purement interprétés ». Pour des langages comme VB6 (ou versions précédentes) et C#, bien qu'en apparence ils génèrent des fichiers programme exécutables .exe, ce qui est réellement généré après la compilation de VB6 est également un code intermédiaire, mais le compilateur insère un paragraphe devant celui-ci. . Appeler automatiquement le code d'un interpréteur externe (l'interpréteur est indépendant du programme écrit par l'utilisateur et stocké dans un fichier DLL du système. Tous les programmes exécutables compilés avec VB6 doivent l'utiliser) pour interpréter le corps réel du programme d'exécution. C# (et d'autres compilateurs de langage .net) génère du code cible .net, qui est en fait exécuté par le système d'interprétation .net (tout comme JVM, il s'agit également d'une plate-forme de machine virtuelle). Bien sûr, le code cible .net est déjà assez "de bas niveau" et est plus proche du langage machine, il est donc toujours considéré comme un langage compilé, et sa portabilité n'est pas aussi puissante que Java le prétend "compiler". une fois, exécuter partout". Et .net signifie "encoder une fois, compiler partout". Haha, bien sûr, c'est hors sujet. En bref, avec le développement continu de la technologie et du matériel de conception, les frontières entre les méthodes compilées et interprétées deviennent de plus en plus floues.Langage dynamique et langage statique Habituellement, ce que nous appelons langage dynamique et langage statique fait référence au langage de types dynamiques et au langage de types statiques.
(1) Langage typé dynamiquement : Un langage typé dynamiquement fait référence à un langage qui effectue uniquement une vérification du type de données pendant l'exécution. En d'autres termes, lors de la programmation dans un langage typé dynamiquement, il s'agit toujours d'un langage typé dynamiquement. Il n'est pas nécessaire d'attribuer un type de données à une variable, le langage enregistrera le type de données en interne la première fois que vous attribuerez une valeur à une variable. Python et Ruby sont des langages typés dynamiquement typiques, et divers autres langages de script tels que VBScript sont également des langages typés plus ou moins dynamiquement.
(2) Langage de type statique : Le langage de type statique est tout le contraire du langage de type dynamique. Son type de données est vérifié lors de la compilation, ce qui signifie que tous les types de données doivent être déclarés lors de l'écriture. un programme. Concernant le type de données des variables, C/C++ est un représentant typique des langages typés statiquement. D'autres langages typés statiquement incluent C#, JAVA, etc.
Langage de définition de type fort et langage de définition de type faible
(1) Type fort Langage de définition : langage qui applique les définitions de types de données. En d’autres termes, une fois qu’un certain type de données est attribué à une variable, ce sera toujours ce type de données si elle n’est pas convertie. Par exemple : si vous définissez une variable entière a, alors il est impossible pour le programme de traiter a comme un type chaîne. Un langage de définition fortement typé est un langage de type sécurisé.
(2) Langage de définition faiblement typé : un langage dans lequel les types de données peuvent être ignorés. C'est l'opposé d'un langage de définition fortement typé, dans lequel une variable peut se voir attribuer des valeurs de différents types de données.
Les langages de définition fortement typés peuvent être légèrement plus lents que les langages de définition faiblement typés, mais la rigueur apportée par les langages de définition fortement typés peut effectivement éviter de nombreuses erreurs. De plus, il n'y a absolument aucun lien entre « si ce langage est un langage dynamique » et « si ce langage est de type sécurisé » ! Par exemple : Python est un langage dynamique, un langage de définition fortement typé (langage de type sécurisé) ; VBScript est un langage dynamique, un langage de définition faiblement typé (JAVA est un langage statique, un langage de définition fortement typé) ; (langue de type sécurisé)).
Grâce à l'introduction ci-dessus, nous pouvons conclure que python est un langage de définition interprété dynamiquement et fortement typé. Alors, quels sont les avantages et les inconvénients de Python rendus possibles par ces gènes ? Continuons à regarder vers le bas.
Avantages et inconvénients de Python
Regardons d'abord les avantages
Le positionnement de Python est « élégant », « clair » et « simple », de sorte que les programmes Python semblent toujours simples et faciles à comprendre. Les débutants qui apprennent Python démarreront non seulement facilement, mais aussi. pourra également en apprendre davantage à l’avenir. Écrivez ces programmes très, très complexes.
L'efficacité du développement est très élevée. Python dispose d'une bibliothèque tierce très puissante. Fondamentalement, si vous souhaitez réaliser n'importe quelle fonction via l'ordinateur, l'officiel. La bibliothèque Python a la fonction correspondante. Les modules sont pris en charge et directement téléchargés et appelés, puis développés sur la base de la bibliothèque de base, ce qui réduit considérablement le cycle de développement et évite de réinventer la roue.
Langage de haut niveau - Lorsque vous écrivez un programme en Python, vous n'avez pas besoin de penser à des choses de bas niveau comme la façon de gérer la mémoire utilisée par votre programme. Détails
Portabilité - En raison de sa nature open source, Python a été porté sur de nombreuses plateformes (avec des modifications pour lui permettre de fonctionner sur différentes plateformes. supérieur). Si vous évitez soigneusement d'utiliser des fonctionnalités dépendantes du système, tous vos programmes Python peuvent s'exécuter sans modification sur presque toutes les plates-formes système du marché
Évolutivité - Si vous Si vous avez besoin d'une partie critique de votre code pour s'exécuter plus rapidement ou si vous souhaitez que certains algorithmes restent privés, vous pouvez écrire des parties de votre programme en C ou C++ et les utiliser dans votre programme Python.
Intégration - Vous pouvez intégrer Python dans votre programme C/C++ pour fournir des fonctionnalités de script aux utilisateurs de votre programme.
Regardons les inconvénients :
Vitesse lente, Python fonctionne plus vite que C Le langage est en effet beaucoup plus lent, voire plus lent que JAVA. C'est donc aussi la principale raison pour laquelle de nombreux soi-disant experts dédaignent d'utiliser Python. Cependant, en fait, la lenteur d'exécution évoquée ici ne peut pas être directement perçue par les utilisateurs. dans la plupart des cas. Oui, cela doit être reflété à l'aide d'outils de test. Par exemple, il faut 0,01 s pour exécuter un programme en C, et 0,1 s en Python. De cette façon, le langage C est directement 10 fois plus rapide que Python. ce qui est très exagéré, mais vous ne pouvez pas le transmettre directement. Cela peut être perçu à l'œil nu, car la plus petite unité de temps qu'une personne normale peut percevoir est d'environ 0,15 à 0,4 s, haha. En fait, dans la plupart des cas, Python peut répondre pleinement aux exigences de vitesse de votre programme, à moins que vous ne souhaitiez écrire un moteur de recherche ayant des exigences de vitesse extrêmement élevées. Dans ce cas, bien sûr, il est recommandé d'utiliser C pour l'implémenter.
Le code ne peut pas être chiffré car PYTHON est un langage interprété et son code source est stocké sous forme de texte, mais je ne pense pas que ce soit un inconvénient. Si votre projet nécessite que le code source soit chiffré, vous ne devez pas utiliser Python pour l'implémenter en premier lieu.
Les threads ne peuvent pas profiter du problème de plusieurs processeurs. C'est le défaut le plus critiqué de Python qui est le Global Interpreter Lock (Global Interpreter Lock), qui est un ordinateur Outil utilisé par les interprètes du langage de programmation pour synchroniser les threads afin qu'un seul thread s'exécute à tout moment. Les threads Python sont des threads natifs du système d'exploitation. Il s'agit de pthread sous Linux et Win thread sous Windows. L'exécution du thread est entièrement planifiée par le système d'exploitation. Un processus interpréteur Python possède un thread principal et plusieurs threads d'exécution de programme utilisateur. Même sur les plates-formes CPU multicœurs, l'exécution parallèle de multi-threads est interdite en raison de l'existence de GIL. Concernant la solution de compromis à ce problème, nous en discuterons en détail plus tard dans les chapitres sur le fil de discussion et le processus.
Bien sûr, Python a quelques autres petits défauts, que je ne listerai pas ici, ce que je veux dire, c'est qu'aucun langage n'est parfait, et qu'il y a des choses pour lesquelles il est bon et d'autres pour lesquelles il ne l'est pas. sur , il est recommandé de ne pas comparer les inconvénients d'un langage avec les avantages d'un autre langage. Le langage n'est qu'un outil, un outil pour réaliser les idées des programmeurs, tout comme lorsque nous apprenions la géométrie au collège, nous le faisons parfois. boussoles nécessaires. Parfois, vous devez utiliser une règle définie, et c'est le bon choix d'utiliser l'outil correspondant pour faire ce qu'il fait de mieux. Beaucoup de gens m'ont déjà demandé lequel est le meilleur, Shell ou Python ? J'ai répondu que Shell est un langage de script, mais Python n'est pas seulement un langage de script, il peut faire plus. Ensuite, certaines personnes sont très intelligentes et disent qu'il n'est pas nécessaire d'apprendre Python. Shell peut faire tout ce que Python peut faire. faites, tant que vous êtes assez bon. B, puis mentionnez que vous pouvez utiliser Shell pour écrire des jeux comme Tetris. La seule façon de l'exprimer est de ne pas discuter avec SB qui vous amènera au même niveau. lui, puis utilisez suffisamment d'expérience pour vous apprendre à renverser.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!