Pin
Send
Share
Send


  • Traductions, 6 septembre 2018 à 19:22
  • Nikita Priyatselyuk

Python est l'un des langages de programmation les plus populaires et les plus populaires. Il y a plusieurs raisons à cela:

  • C'est facile à apprendre.
  • Il est très polyvalent.
  • Il possède de nombreux modules et bibliothèques.

Dans le processus de travail avec Python, chacun trouve pour lui-même quelques modules et astuces utiles. Dans cette collection, vous découvrirez quelques astuces utiles.

Collections

Python a des types de données intégrés sympas, mais parfois ils ne se comportent pas exactement comme ils le souhaiteraient.

Heureusement, la bibliothèque intégrée Python possède un module de collections avec des types de données supplémentaires pratiques:

Vous êtes-vous déjà demandé comment regarder à l'intérieur d'un objet en Python et regarder ses attributs? Bien sûr, pensaient-ils.

École XYZ, Moscou, jusqu'à 250 000 ₽

Utilisez la ligne de commande:

Cela peut être utile lors d'une session interactive en Python, ainsi que pour l'étude dynamique des objets et des modules avec lesquels vous travaillez.

De __future__ import

L'une des conséquences de la popularité de Python est que de nouvelles versions sont constamment développées et publiées. Nouvelles versions - nouvelles fonctionnalités, mais pas pour vous si vous utilisez des versions obsolètes.

Cependant, tout n'est pas si mauvais. Le module __future__ permet d'importer les fonctionnalités des futures versions de Python. C’est comme un voyage dans le temps ou de la magie:

Geopy

Il peut être difficile pour les programmeurs de naviguer dans la géographie. Cependant, le module geopy simplifie les choses:

$ pip install geopy

Il fonctionne en faisant abstraction des API de différents services de géocodage. Ce module permet de connaître l'adresse complète du lieu, sa longitude et sa latitude et même sa hauteur.

Il a également une classe de distance utile. Il calcule la distance entre deux endroits dans une unité de mesure pratique.

Howdoi

Vous êtes accroché à un problème et vous ne vous souvenez pas de sa solution? Vous devez aller sur StackOverflow, mais vous ne voulez pas quitter le terminal?

Ensuite, vous ne pouvez pas vous passer de cet outil de ligne de commande:

$ pip install howdoi

Posez n'importe quelle question et il essaiera de trouver la réponse:

Mais attention: il extrait le code des meilleures réponses sur StackOverflow et ne fournit pas toujours des informations utiles:

$ howdoi exit vim

Dois-je continuer à traduire des leçons Python?

En général, comme il s'est avéré récemment, sur YouTube, il existe déjà des vidéos de Bucky Roberts sur la programmation Python3, ici vous pouvez les regarder sur ce lien:

Désabonnez-vous dans le commentaire si je devais l'exprimer davantage, même si ce matériel a déjà été traduit. Merci de votre attention.

Notions de base, partie 1. Pour les nourrissons.

Il est supposé que l'article http://pikabu.ru/story/hello_world_4265035 a déjà été lu ou que vous avez une distribution Linux.

Il est supposé que le public sera intéressé, et si c'est le cas, j'écrirai quelques articles supplémentaires sur python pour me familiariser avec la syntaxe, les structures de données standard, certaines bibliothèques standard, afin de poursuivre le développement sur Django.

Il est supposé que le public ne se compose pas d'amibes de type végétal, mais de personnes développées qui sont prêtes à utiliser leur boîte de crâne non seulement pour manger.

Pour commencer, leurre. Vous pouvez écrire beaucoup sur la façon dont le python est cool, son utilisation pour les bigdata, les données, le développement web et tout le reste. Mais ce ne sont que des mots secs. Par conséquent, je vais donner quelques exemples d'utilisation de python comme langage principal.

Instagram - hébergement préféré de tous de photos de nourriture et de putains de trains stupides. Oui, il est écrit en python. De plus, Django est pris pour le framework, vers lequel nous allons explorer s'il y a des gens qui veulent explorer en plus de moi. De plus, ils ont pris le serveur HTTP Gunicorn, sur lequel nous rampons également. En tant que base de données, ils utilisent PostgreSQL - mon SGBDR préféré et c'est pourquoi nous pouvons également y accéder.

Reddit est un service amusant de rire, je pense que tout le monde en a entendu parler de toute façon. Il est également écrit en python, mais dans le framework Pyramid, pas Django. Deux bases de données sont utilisées comme base de données: Cassandra et PostgreSQL. Memcached et Facebook mcrouter sont utilisés comme cache. En tant que courtier de messages, RabbitMQ est utilisé.Le code source est accessible au public ici https://github.com/reddit/reddit

exchange.livejournal.com - Échange de blogueurs LiveJournal, récemment ouvert. Pourquoi est-elle ici? Parce que j'ai participé à son développement. Il est également écrit en Django avec la base de données PostgreSQL.

Sur ce leurre se termine et commence ma partie mal aimée - boucles, branches et variables.

Tous les morceaux de code seront des captures d'écran du bloc-notes Jupyter, premièrement, car il est pratique pour moi de l'écrire, et deuxièmement, parce qu'il n'y a rien à copier le code de quelqu'un d'autre.

Python est un langage à fort typage dynamique. Qu'est-ce que cela signifie?

- Si vous souhaitez ajouter le numéro 5 avec la chaîne «7» - vous serez grondé. C'est ce qu'on appelle un typage fort. Aucune conversion au type "plus général".

- Si un nombre a été stocké dans la variable x, cela ne signifie pas qu'il ne peut pas lui être attribué de chaîne. Il s'agit d'un typage dynamique. Le type de la variable, bien sûr, n'a pas besoin d'être spécifié n'importe où.

Une fonctionnalité intéressante est l'affectation parallèle. L'échange de valeur est également pris en charge.

Il y a aussi plusieurs affectations que je fortement Je ne recommande pas de l'utiliser inconsidérément (cela s'applique aux types de données non planaires, dont nous parlerons plus tard):

Avec des variables, comme pour l'instant.

Contrairement à la syntaxe de type C, nous n'avons ni accolades pour mettre en surbrillance les blocs, ni accolades pour mettre en évidence une expression conditionnelle (en fait, rien n'empêche de mettre la condition entre crochets). Les blocs sont mis en évidence UNIQUEMENT avec des retraits. Il n'y a pas de commutateurs, seulement si, elif et autre. L'exemple suivant, je pense, va tout expliquer pour moi:

Et maintenant une petite surprise. Malgré le fait que le langage ait un typage strict, les comparaisons entre certains types de données inégales (int, float, Decimal) sont prises en charge. Par exemple, 5 == 5.0 renverra True, bien que 5 soit un entier et 5.0 une virgule. Mais son utilisation est considérée comme une mauvaise forme.

Si jusqu'à ce jour vous ne connaissiez pas le mot "itérateur" et n'écriviez que des cycles par indices, comme pour (int i = 0, i

Pour les boucles d'index régulières, il existe un générateur de plage. A propos des générateurs trop tard.

Les fonctions en python sont déclarées de deux manières:

Cependant, je recommande fortement d'utiliser la deuxième méthode de STRICTLY ADJUST pour définir les fonctions ordinaires. Les fonctions lambda (ou fonctions anonymes) sont nécessaires uniquement pour leur transmettre un argument aux fonctions d'ordre supérieur.

Ici, probablement, deux questions se sont posées immédiatement:

Comment passer un argument à une autre fonction?

Qu'est-ce qu'une fonction d'ordre supérieur?

Parce que python est orienté objet, donc tout ce qu'il contient est un objet. Et la fonction aussi. Un argument d'une fonction peut être n'importe quel objet, y compris et fonction:

Il y a beaucoup de choses intéressantes dans cet exemple:

1) Après avoir défini la fonction (def), vous pouvez entrer la soi-disant docstring, qui décrit ce que fait la fonction. Dans le même temps, cette chaîne d'ancrage est stockée dans l'attribut __doc__ de l'objet fonction (qui indique une fois de plus que la fonction est un objet)

2) L'attribut __name__ contient le nom de l'objet (fonction ou classe)

3) h dans ce cas est une fonction d'ordre supérieur. Une fonction d'ordre supérieur est une fonction qui accepte ou renvoie une autre fonction. Cela sera utile pour les décorateurs, dont plus tard également.

Des fonctions peuvent être attribuées à d'autres variables:

Mais le nom (__name__) restera le même, car en fait, f et same_func ne font référence qu'à la fonction.

Même, semble-t-il, j'ai déjà erré loin. Dans la partie suivante, si je vois l'intérêt du public, je parlerai des structures de données standard (listes, tuples, dictionnaires, ensembles) et à quoi elles servent et à quoi elles servent.

P.S. Le message a été écrit sans préparation, directement à l'éditeur de messages picabu, écrivez toutes les lacunes dans les commentaires, lancez avec des pantoufles et des tomates.

Pour les débutants pour apprendre la programmation (Python)

Il convient de noter que python est le meilleur choix pour un débutant qui souhaite commencer à apprendre la programmation. Cependant, ce sujet n'est pas destiné à un seul article. Et l'étude de la programmation ne doit pas être construite sur un seul langage, mais inclure plusieurs sujets, mais ce post est destiné à ceux qui savent ce que python veut apprendre, mais ne savent pas quel type de littérature choisir.

1.Michael Dawson - Programmation en python

Cela vaut la peine de commencer avec ce livre. Sans plonger excessivement dans la langue, ses fondements sont considérés.Tout le matériel est soutenu par de nombreux exemples, principalement liés à des sujets de jeu. Le chapitre est structuré comme ceci: au tout début, un programme est donné que vous pouvez écrire de la même manière qu'après avoir lu le chapitre, mais pendant que vous étudiez, vous tombez sur un certain nombre de programmes plus simples qui permettent de comprendre le principal. Cela inonde littéralement le livre d'exemples et fournit la pratique nécessaire pour les débutants. Eh bien, bien sûr, cela pousse à créer vos propres programmes.

Un excellent livre, mais trop détaillé pour un débutant, il vaut la peine d'être lu conjointement avec la pratique. Quelque chose comme: vous vouliez écrire un programme, mais vous manquez de connaissances plus approfondies pour le rendre plus pratique / plus court / plus beau, etc.

3.Mark Summerfield - Programmation Python 3

Il y a la même dynamique que dans le premier livre, il n'y a pas d'informations inutiles, mais c'est plus compliqué, tout n'est pas aussi mâché que celui de Dawson. Il est à noter qu'après avoir lu Dawson, l'élaboration de ce livre n'est pas particulièrement difficile.

4.Mark Lutz - Programmation Python

Le livre vous apprend à appliquer les connaissances acquises dans "Learning Python 4th Edition", mais il est également surchargé d'informations superflues pour les débutants, qui seront beaucoup plus faciles à percevoir après Dawson et Summerfield. Ce livre est une finition dans l'étude initiale de la langue. Après l'avoir maîtrisé, vous pouvez passer à un travail plus approfondi.

J'espère que quelqu'un aide cette sélection. Profitez de la lecture et amusez-vous à apprendre.

Yandex.Translator pour Linux sur l'interface graphique Python

Il y a très longtemps, un traducteur multilingue en ligne avec un navigateur fermé était nécessaire.

Non, je ne dédaigne pas d'utiliser le dictionnaire dans des cas «particulièrement difficiles», mais parfois je dois lire un texte assez gros, et pas tous les mots que je connais, comment le contexte est perdu.

Le truc Translate-shell est assez pratique, surtout si vous écrivez, par exemple, dans Vi / vim. Passez à la console suivante et traduisez.

Les touches sont simples et faciles à retenir.

Mais cela, comme d'habitude, n'était pas suffisant. Je voulais des graphismes.

Travailler dans SublimeText et Zeal est un peu plus pratique qu'une console nue.

Hmm ... Pensé, pensé et décidé d'attacher le traducteur à un raccourci clavier.

Le choix s'est porté sur gxmessage. La zénité ne me convenait pas, je ne me souviens pas pourquoi.

Le code a été écrit:

Cela me convenait un moment. Pour "contrôler + 1" de l'anglais, "contrôler + 2" vers l'anglais. Bon.

Mais alors le translate-shell a commencé à échouer.

Je ne sais pas ce qui est arrivé aux développeurs, mais cela m'a vraiment bouleversé.

J'ai décidé qu'il était temps, je n'ai pas écrit en python depuis longtemps.

Une courte recherche sur Google m'a conduit à Yandex.API, Python et GTK + 3 en tant que module gi.

Pourquoi gi, parce que vous écriviez habituellement dans PyQt5? Ça marche beaucoup plus vite sur ma voiture. La machine n'est pas neuve, la mémoire aussi (selon les normes modernes) n'est pas si chaude.

En conséquence, j'ai un traducteur automatique sur une touche de raccourci.

Merci à tous pour votre attention.

Bonjour tout le monde!

J'ai écrit ici à propos d'une bibliothèque puissante, simple et intéressante que j'utilise presque tous les jours, mais j'ai soudain réalisé qu'il vaut mieux faire le premier message juste pour la recherche des faits, pour ceux qui sont complètement, complètement nouveaux. :)

Par conséquent, aujourd'hui, nous allons parler un peu de ce qu'est le python et essayer de l'obtenir sur notre ordinateur.

Si vous programmez déjà en python, ce post n'est clairement pas fait pour vous. :) Vous ne le lisez peut-être pas du tout, mais écrivez plutôt le vôtre ici sur quelque chose d'intéressant de votre expérience! Avec préférence et poètes, comme prévu. ,)

Ainsi, comme nous l'indique une source fiable (Wikipedia), python (je prononce Python, certains russophones disent que Python) est un langage de programmation à usage général visant à améliorer la productivité des développeurs et la lisibilité du code. En d'autres termes, vous pouvez rapidement écrire du code dessus et comprendre ce qu'un voisin a écrit.

Malgré l'apparente simplicité de la définition, elle a un potentiel énorme grâce à la prise en charge de plusieurs paradigmes de programmation à la fois, un grand nombre de fonctions prêtes à l'emploi (dans la bibliothèque standard) et, bien sûr, l'extensibilité, grâce à un grand nombre de bibliothèques non standard faciles à installer.

L'appliquent-ils dans la pratique?

Bien sûr! Python est un langage très courant! Avec lui, vous pouvez créer des sites, traiter des données, travailler avec l'apprentissage automatique et bien d'autres choses intéressantes. Il est utilisé par de nombreuses grandes entreprises (par exemple, Google, qui est loin d'être terminé).Avec lui, vous pouvez créer des scripts simples pour la vie quotidienne et vous engager sérieusement dans le développement scientifique et commercial.

Intéressé par? Alors essayons d'écrire et d'exécuter quelque chose en Python! :)

Il est important de comprendre qu'il existe des façons obscures de le faire! Vous pouvez écrire votre programme même dans un environnement de développement puissant avec mise en évidence de la syntaxe et autres goodies, même dans un cahier ordinaire, même sur Internet (et exécuté au même endroit). Je pense que ce sera un poste séparé. Pour l'instant, je vais simplement montrer comment vous pouvez exécuter des commandes dans l'interpréteur python.

Et tout de suite quelques mots sur ce dernier, car si vous le lisez, alors peut-être que vous ne savez pas ce que c'est.

Python est un langage interprété. En bref, cela signifie que ses instructions sont exécutées (interprétées) les unes après les autres de manière séquentielle, sans tout compiler à la fois, comme par exemple en langage C. L'interprète est juste un programme spécial qui traite de l'interprétation.

Pour utiliser le langage python, vous devez télécharger et installer son implémentation depuis le site officiel https://www.python.org/downloads/.

Je vais donner un exemple sur la 3e série du langage python (3.5.1), donc je recommande de le télécharger. Pour Windows, cela peut être fait directement sur ce lien. Lors de l'installation, n'oubliez pas de cocher la caseAjouter au CHEMIN, cela vous simplifiera la vie à l'avenir.

Télécharger et installer? Super! Lançons l'interpréteur. Ouvrez la ligne de commande (appuyez sur Démarrer cmd) et entrez-y:

L'interprète est en marche! Oui, c'est aussi simple que cela! Si tout est fait correctement, alors il y aura quelque chose comme:

Exécutez maintenant la première commande! Entrez:

Oui, elle vient d'imprimer, ce qui est entre parenthèses, entre guillemets à l'écran! Cela a exécuté la fonction de langage python standard - imprimer (). Comme vous pouvez le voir, ici, contrairement à C, par exemple, vous n'avez pas besoin d'y attacher quoi que ce soit, vous n'avez pas besoin de le séparer en aucune façon (dans ce cas particulier), vous n'avez pas besoin de mettre quoi que ce soit après.

De manière générale, l'interprète imprime la chaîne entre guillemets et sans aucun print () dans ce mode, comme un nombre (seuls les nombres doivent être écrits sans guillemets), ainsi que même des opérations arithmétiques sur les nombres et les variables, mais je ne vous conseillerais pas de vous y habituer, car si vous exécutez le programme à partir d'un fichier, alors omission similaire print () ne provoquera qu'une erreur.

Soit dit en passant, sur les opérations arithmétiques. Vous pouvez les engager directement en fonction sans pincement de conscience print (). Essayez, par exemple, dans l'ordre:

imprimer (100 + 1)
imprimer (42/7)
imprimer (111111111 * 111111111)

C'est tout pour l'instant! Merci de votre attention! Il est très difficile d'écrire le premier message dans toute la communauté - le niveau de lecteurs n'est pas tout à fait clair. J'ai donc décidé de le consacrer aux débutants absolus. J'espère ne pas avoir perdu. :)

Merci de votre attention!

Python est-il interprété ou compilé?

C'est une source courante de malentendu chez les débutants en Python.

La première chose à comprendre: «Python» est l'interface. Il existe une spécification qui décrit ce que Python doit faire et comment il doit se comporter (ce qui est vrai pour n'importe quelle interface). Et il existe plusieurs implémentations (ce qui est également vrai pour n'importe quelle interface).

Le second: «interprété» et «compilé» sont les propriétés de l'implémentation, mais pas de l'interface.

La question elle-même n'est donc pas entièrement correcte.

Dans le cas de l'implémentation la plus courante (CPython: écrit en C, souvent simplement appelé "Python", et, bien sûr, celui que vous utilisez si vous n'avez aucune idée de ce que j'interprète) la réponse est: interprétée, avec une certaine compilation. CPython compile * le code source Python en un bytecode, puis interprète ce bytecode, le démarrant dans le processus.

* Remarque: il ne s'agit pas exactement de «compilation» au sens traditionnel. Habituellement, nous pensons que la «compilation» est une conversion d'un langage de haut niveau en code machine. Cependant - à certains égards, il s'agit de «compilation».

Étudions mieux cette réponse, car elle nous aidera à comprendre certains des concepts qui nous attendent dans cet article.

Bytecode ou code machine

Il est très important de comprendre la différence entre le bytecode et le code machine (ou natif). La façon la plus simple de le comprendre est peut-être un exemple:

- C est compilé en code machine, qui est ensuite lancé directement par le processeur. Chaque instruction oblige le processeur à effectuer différentes actions.
- Java est compilé en bytecode, qui est ensuite exécuté sur la machine virtuelle Java (JVM), un ordinateur abstrait qui exécute des programmes. Chaque instruction est traitée par une machine virtuelle Java qui interagit avec un ordinateur.

Simplifier grandement: le code machine est beaucoup plus rapide, mais le bytecode est mieux portable et sécurisé.

Le code machine peut varier en fonction de la machine, tandis que le bytecode est le même sur toutes les machines. Nous pouvons dire que le code machine est optimisé pour votre configuration.

De retour à CPython, la chaîne d'opérations est la suivante:

1. CPython compile votre code source Python en bytecode.
2. Ce bytecode s'exécute sur la machine virtuelle CPython.

Les débutants supposent souvent que Python est compilé en raison de la présence de fichiers .pyc. Cela est en partie vrai: les fichiers .pyc sont compilés par du code postal, qui est ensuite interprété. Donc, si vous avez exécuté votre code en Python et que vous avez un fichier .pyc, la deuxième fois, cela fonctionnera plus rapidement, car il n'aura pas besoin d'être recompilé en bytecode.

Machines virtuelles alternatives: Jython, IronPython et autres

Comme je l'ai dit ci-dessus, Python a plusieurs implémentations. Encore une fois, comme mentionné ci-dessus, CPython est le plus populaire. Cette version de Python est écrite en C et est considérée comme une implémentation «par défaut».

Mais qu'en est-il des alternatives? L'un des plus importants est Jython, une implémentation Python en Java qui utilise la JVM. Alors que CPython génère du bytecode à exécuter sur la machine virtuelle CPython, Jython génère du bytecode Java à exécuter sur la JVM (c'est la même chose que lors de la compilation du programme Java).

«Pourquoi pourriez-vous avoir besoin d'utiliser une implémentation alternative?», Demandez-vous. Eh bien, pour commencer, différentes implémentations s'entendent bien avec différents ensembles de technologies.

CPython facilite l'écriture d'extensions C pour le code Python car à la fin, il est démarré par l'interpréteur C. Jython, à son tour, simplifie le travail avec d'autres programmes Java: vous pouvez importer n'importe quelle classe Java sans effort supplémentaire, en invoquant et en utilisant vos classes Java à partir de programmes Jython. (Remarque: si vous n'y avez pas pensé sérieusement, c'est assez fou. Nous avons vécu pour voir le moment où vous pouvez mélanger différents langages et les compiler en une seule entité. Comme l'a noté Rostin, les programmes qui mélangent le code Fortran et C sont apparus il y a longtemps, donc ce n'est pas entièrement nouveau. Mais c'est quand même cool.)

À titre d'exemple, voici le code Jython correct:

Machine virtuelle serveur Java HotSpot (TM) 64 bits (Apple Inc.) sur java1.6.0_51
>>> depuis java.util import HashSet
>>> s = HashSet (5)
>>> s.add ("Foo")
>>> s.add ("Bar")
>>> s
Foo bar

IronPython est une autre implémentation Python populaire écrite entièrement en C # pour .NET. En particulier, il s'exécute sur la machine virtuelle .NET, si vous pouvez l'appeler ainsi, sur le Common Language Runtime (CLR), de Microsoft, comparable à la JVM.

On pourrait dire que Jython: Java :: IronPython: C #. Ils fonctionnent sur les machines virtuelles correspondantes, il est possible d'importer des classes C # dans du code IronPython et des classes Java dans du code Jython, etc.

Il est tout à fait possible de survivre sans toucher à quoi que ce soit sauf CPython. Mais, en passant à d'autres implémentations, vous obtenez un avantage, principalement en raison de la pile technologique utilisée. Vous utilisez beaucoup de langages basés sur JVM? Jython peut vous convenir. Est-ce que tout est sur .NET? Cela pourrait valoir la peine d'essayer IronPython (et peut-être que vous l'avez déjà fait).

Soit dit en passant, bien que cela ne devienne pas une raison pour passer à une autre implémentation, il convient de mentionner que ces implémentations diffèrent réellement dans leur comportement. Cela ne s'applique pas seulement à l'interprétation du code Python. Cependant, ces différences ne sont généralement pas significatives, elles disparaissent et apparaissent avec le temps en raison d'un développement actif. IronPython, par exemple, utilise des chaînes Unicode par défaut, mais CPython utilise ASCII dans les versions 2.x (lançant une erreur UnicodeEncodeError pour les caractères non ASCII), tout en prenant en charge les caractères Unicode par défaut dans les versions 3.x.

Compilation à la volée (compilation juste à temps): PyPy et l'avenir

Nous avons donc une implémentation Python écrite en C, une de plus en Java et la troisième en C #. La prochaine étape logique: l'implémentation de Python, écrit en ... Python. (Un lecteur expérimenté remarquera que cette déclaration est un peu trompeuse).

C'est pourquoi cela peut être déroutant. Pour commencer, discutons de la compilation à la volée (juste à temps ou JIT).

Jit. Pourquoi et comment

Permettez-moi de vous rappeler que le code machine natif est beaucoup plus rapide que le bytecode. Et si vous pouviez compiler une partie du bytecode et l'exécuter en tant que code natif? Je devrais «payer» un certain prix (en d'autres termes: le temps) pour la compilation du bytecode, mais si le résultat fonctionne plus rapidement, alors c'est génial! Cela motive la compilation JIT, une technique hybride qui combine les avantages des interprètes et des compilateurs. En bref - JIT essaie d'utiliser la compilation pour accélérer le système d'interprétation.

Par exemple, voici une approche JIT courante:

  1. Définissez un bytecode qui s'exécute fréquemment.
  2. Compilez-le en code machine natif.
  3. Mettez le résultat en cache.
  4. Chaque fois que vous devez exécuter le même bytecode, utilisez un code machine déjà compilé et profitez-en (en particulier, augmentation de la vitesse).

C'est tout l'intérêt de PyPy: utiliser JIT en Python (en annexe, vous pouvez trouver les tentatives précédentes). Bien sûr, il y a d'autres objectifs: PyPy est destiné aux plates-formes croisées, fonctionnant avec une petite quantité de mémoire et un support sans pile (abandonnant la pile d'appels en langage C au profit de sa propre pile). Mais JIT est le principal avantage. Sur la base de tests de temps, le facteur d'accélération moyen est de 6,27. Des données plus détaillées peuvent être obtenues à partir du schéma de PyPy Speed ​​Center:

PyPy est difficile à comprendre

PyPy a un énorme potentiel, et pour le moment il est bien compatible avec CPython (pour que vous puissiez y exécuter Flask, Django, etc.).

Mais avec PyPy, il y a beaucoup de confusion. (appréciez, par exemple, cette proposition dénuée de sens de créer PyPyPy ...). À mon avis, la principale raison pour laquelle PyPy est en même temps:

1. Interprète Python écrit en RPython (pas Python (je vous ai déjà trompé)). RPython est un sous-ensemble de Python avec typage statique. En Python, mener des conversations approfondies sur les types est «généralement impossible», pourquoi est-ce si difficile? tenez compte des éléments suivants:

x = random.choice (1, "foo")

c'est le bon code python (merci à Ademan). De quel type est x? Comment pouvons-nous discuter des types de variables lorsque les types ne sont même pas forcés?). Dans RPython, nous sacrifions une certaine flexibilité, mais en retour, nous avons la possibilité de gérer de plus en plus la mémoire, ce qui contribue à l'optimisation.

2. Un compilateur qui compile le code RPython dans différents formats et prend en charge JIT. La plate-forme par défaut est C, c'est-à-dire le compilateur RPython-in-C, mais vous pouvez également sélectionner JVM et d'autres comme plate-forme cible.

Pour faciliter la description, je les appellerai PyPy (1) et PyPy (2).

Pourquoi avez-vous besoin de ces deux choses, et pourquoi - dans un ensemble? Pensez-y de cette façon: PyPy (1) est un interpréteur écrit en RPython. Autrement dit, il prend le code utilisateur en Python et le compile en bytecode. Mais pour que l'interprète lui-même (écrit en RPython) fonctionne, il doit être interprété par une autre implémentation Piton, non?

Ainsi, vous pouvez simplement utiliser CPython pour démarrer l'interpréteur. Mais ce ne sera pas trop rapide.

Au lieu de cela, nous utilisons PyPy (2) (appelé RPython Toolchain) pour compiler l'interpréteur PyPy en code pour une autre plate-forme (comme C, JVM ou CLI) à exécuter sur la machine de destination, avec l'ajout de JIT. C'est magique: PyPy ajoute dynamiquement JIT à l'interpréteur, générant son propre compilateur! (Encore une fois, c'est fou: nous compilons l'interpréteur en ajoutant un autre compilateur autonome séparé).

Au final, le résultat sera un exécutable autonome qui interprète le code source Python et utilise l'optimisation JIT. Ce dont vous avez besoin! C'est difficile à comprendre, mais peut-être que ce schéma aidera:

Encore une fois, la vraie beauté de PyPy est que nous pouvons écrire un tas d'interprètes Python différents sur RPython sans se soucier de JIT (à part quelques détails). Après cela, PyPy implémente JIT pour nous à l'aide de RPython Toolchain / PyPy (2).

En fait, si vous creusez plus profondément dans l'abstraction, vous pouvez théoriquement écrire un interpréteur pour n'importe quelle langue, le diriger vers PyPy et obtenir un JIT pour cette langue. Cela est possible car PyPy se concentre sur l'optimisation de l'interprète lui-même, plutôt que sur les détails de la langue qu'il interprète.

En tant que digression, je voudrais noter que JIT lui-même est absolument incroyable. Il utilise une technique appelée «traçage», qui fonctionne comme suit:

  1. Exécutez l'interpréteur et interprétez tout (sans ajouter de JIT).
  2. Effectuez un profilage facile du code interprété.
  3. Identifiez les opérations qui ont déjà été effectuées précédemment.
  4. Compilez ces morceaux de code en code machine.

Vous pouvez en apprendre davantage sur cette publication facilement accessible et très intéressante.

Pour résumer: nous utilisons le compilateur PyPy RPython-in-C (ou une autre forme de plateforme cible) pour compiler l'interpréteur PyPu implémenté sur RPython.

Conclusion

Pourquoi tout cela est-il si étonnant? Pourquoi vaut-il la peine de chasser cette idée folle? À mon avis, Alex Gaynor l'a très bien expliqué dans son blog: "Pour PyPy, l'avenir est parce qu'il est plus rapide, plus flexible et est la meilleure plate-forme pour le développement de Python."

  • Il est rapide - car il compile le code source en code natif (en utilisant JIT).
  • Il est flexible - car il ajoute JIT à l'interpréteur sans trop d'effort.
  • Il est flexible (encore une fois) - car vous pouvez écrire des interprètes en RPython, ce qui simplifie ensuite l'extension par rapport au même C (en fait, il simplifie tellement qu'il y a même une instruction pour écrire vos propres interprètes).

Addition: autres noms que vous avez peut-être entendus

Python 3000 (Py3k): nom alternatif pour Python 3.0, la version principale de Python avec compatibilité descendante, qui est apparue en 2008. L'équipe Py3k a prédit que la nouvelle version mettrait environ cinq ans à prendre racine. Et tandis que la majorité (attention: déclaration farfelue) des développeurs Python continue d'utiliser Python 2.x, les gens pensent de plus en plus à Py3k.

Cython: un sur-ensemble de Python qui inclut la possibilité d'appeler des fonctions C.

  • Objectif: Écrivons des extensions C pour les programmes Python.
  • Il vous permet également d'ajouter du typage statique au code Python existant, qui après la recompilation peut aider à obtenir des performances de type C.
  • Rappelle PyPy, mais ce n'est pas pareil. Dans le cas de Cython, vous forcez la saisie du code utilisateur avant de le servir au compilateur. Dans PyPy, vous écrivez du bon vieux Python, et le compilateur est responsable de toute optimisation.

Numba: un «compilateur juste à temps spécialisé» qui ajoute JIT au code annoté de Python. Autrement dit, vous lui donnez des indices et il accélère certaines parties de votre code. Numba fait partie de la suite de distribution Anaconda de progiciels d'analyse et de gestion de données.

IPython: très différent de tout ce dont nous avons discuté. Environnement informatique pour Python. Interactif, avec prise en charge des packages d'interface graphique, des navigateurs, etc.

Module d'extension Psyco: Python, l'une des premières tentatives de Python dans le domaine JIT. Il a longtemps été marqué comme «non soutenu et mort». Le développeur en chef de Psyco, Armin Rigo, travaille actuellement sur PyPy.

Liaisons linguistiques

  • RubyPython: un pont entre les machines virtuelles Ruby et Python. Vous permet d'incorporer du code Python dans du code Ruby. Vous indiquez où Python commence et se termine et RubyPython assure le transfert de données entre les machines virtuelles.
  • PyObjc: une connexion de langage entre Python et Objective-C qui se comporte comme un pont entre eux. En pratique, cela signifie que vous pouvez utiliser les bibliothèques Objective-C (y compris tout ce dont vous avez besoin pour créer une application pour OS X) en code Python et les modules Python en code Objective-C. C'est pratique car CPython est écrit en C, qui est un sous-ensemble d'Objective-C.
  • PyQt: alors que PyObjc vous permet d'associer Python à des composants GUI OS X, PyQt fait de même pour le framework Qt. Cela permet de créer des interfaces graphiques à part entière, d'accéder aux bases de données SQL, etc. Un autre outil visant à porter la simplicité de Python vers d'autres frameworks.

Cadres Javascript

  • pajs (Pyjamas): un framework pour créer des applications web et de bureau en Python. Comprend un compilateur Python-in-JavaScript, un ensemble de widgets et quelques autres outils.
  • Brython: une machine virtuelle Python écrite en Javascript. Vous permet d'exécuter du code Py3k dans un navigateur Web.

5 histoires drôles et épiques de pick-ups sur le réveillon du Nouvel An

Vous souvenez-vous de ce qui vous est arrivé le soir du nouvel an? Disons comment ils se sont alignés dans la nuit du 30 au 31 décembre pour les mandarines ou ont brûlé le plat principal. Pikabushniki a partagé avec nous des cas doux, étranges et drôles. Dans cet article, nous publions les cinq meilleures histoires et offrons des cadeaux.

Si vous n'avez pas vu de message où nous avons annoncé un concours d'histoire, nous vous le dirons. Nous l'avons lancé avec Yandex.Shev et les auteurs des cinq histoires les plus intéressantes, selon le jury, ont promis de donner des décors pour le dîner du Nouvel An. Récemment, le service a lancé cinq menus des Fêtes: avec du poulet. boeuf, porc, canard et poisson. Ils ont récupéré le plat chaud principal, les salades non standard et les collations. Qu'est-ce qu'on te dit? Nous avons déjà testé ici.

Il y a toujours plus de participants que de gagnants. Pour que personne ne parte les mains vides: nous donnons un code promotionnel pour une remise de 800 roubles. Pour commander un dîner à prix réduit, lors de la commande, entrez le code promotionnel Picabu. La promotion est valable pour un montant de 4000 roubles jusqu'au 28 décembre.

Il est maintenant temps pour les histoires des gagnants!

1. "Champagne très voisé"

«Des amis ont décidé de célébrer la nouvelle année à la maison. Ils ont invité un groupe d'amis, la table regorgeait de salades, de cornichons, de sandwichs au caviar et d'autres friandises. Et maintenant, il reste quelques minutes avant le combat des carillons, tout le monde se lève, le propriétaire ouvre le champagne sous les oohs et les aahs généraux de l'anticipation. Et puis le bouchon saute hors de la bouteille et vole dans un lustre en verre suspendu directement au-dessus de la table. Bruyante sonnerie, cliquetis de fragments tombant dans des assiettes. J'ai donc dû jeter toute la nourriture et barrer rapidement quelque chose d'une nouvelle façon. L'hôtesse se souviendra longtemps de cette nouvelle année. Je souhaite à tous de rester optimistes dans toutes les situations :) "

2. "L’assistante de maman"

«Je n'ai qu'une histoire amusante sur le dîner du Nouvel An - comme le 31 décembre, ma mère a fait cuire toutes les racines, s'est enfuie pour affaires et m'a demandé de tout nettoyer avec un plat peu profond. Mais je suis l'assistante de ma mère. J'ai tout nettoyé, puis coupé en cube et mélangé. Comment savais-je à un jeune âge qu'il s'agissait de préparations pour olivier, un manteau de vinaigrette? Le soir du nouvel an, nous avons mangé un énorme bol de salade de pommes de terre, carottes, oignons, betteraves, pois, choucroute, mayonnaise. Eh bien, en général, tout ce qui était préparé pour les salades. Le hareng ne semblait pas affecté. Je ne me souviens pas, ça faisait longtemps :) C'était très gênant. Il fallait laisser des instructions, comme dans ces livraisons: couper, interférer, ne pas toucher, si les bras ne sont pas des épaules. Cependant, si les mains ne sont pas sorties des épaules, aucune instruction n'aidera ... "

«Ce n'est pas tout à fait une préparation, mais une histoire drôle sous le carillon. J'ai célébré le Nouvel An avec mes parents, nous avons décidé de changer les traditions et d'acheter du champagne rouge et non blanc. Et à mi-chemin du discours du président, mon père cherche la bouteille pour l'ouvrir, a retiré le papier d'aluminium, mais ne peut pas ouvrir le bouchon. Essayant frénétiquement de l'ouvrir, car bientôt l'horloge sonnante, papa ne pouvait pas penser à mieux que de le secouer et de pousser le bouchon avec son doigt dans un mouvement habile mais puissant. À ce moment, une bacchanale a commencé. Comme dans le film "Radiance", où le sang coulait de l'ascenseur avec une fontaine, notre champagne coulait dans tous les sens, remplissant la table du Nouvel An d'éclaboussures sanglantes, nous à table et tout le reste. Le bouchon, ricochant du plafond, chargea la mère en plein visage. Nous nous sommes figés tandis que Poutine derrière l'écran de télévision, couvert de taches sanglantes, a terminé son discours et a fait un rapport en arrière. Papa a en quelque sorte versé du champagne, qui est resté presque au fond de la bouteille et sous le rire hystérique, tout en peinture et en champagne doux, nous avons célébré le Nouvel An. P.S. Tout va bien avec maman, elle s'en est sortie avec une légère frayeur). »

4. "Tarte Lego argent pour bonne chance"

«Donc, cette histoire s'est passée littéralement quelques heures avant le Nouvel An. Une table a été déplacée de la cuisine à la grande pièce, les plats ont été disposés sur des assiettes et étaient sur le point d'être servis. La plupart de la famille s'est déjà réunie et attend avec impatience une fête. Dans la cuisine, maman et belle-mère finissent la vaisselle, les enfants se précipitent de chambre en chambre.Et puis notre fils de quatre ans a remarqué que la grand-mère mettait une pièce dans la tarte et, bien sûr, a paniqué. Mais il s'est immédiatement calmé quand on lui a dit que c'était une telle tradition: celui qui trouvera cette pièce sera accompagné de chance toute l'année. Finalement, tout le monde s'assit à table, finit peu à peu avec olivier, hareng sous un manteau de fourrure, rôti, et il était temps pour la tarte. Directement sortie du four, rosée, parfumée, fumante! Le mari coupe chaque morceau de chacun et tout le monde commence à freiner le gâteau avec un couteau dans l'espoir de trouver une pièce. À ma grande surprise, je n'en trouve pas un, mais quatre! Une prise similaire pour tous les participants à la fête. Le coupable d'une telle abondance est devenu apparent lorsque son mari a rencontré un homme Lego. Il s'est avéré que le fils voulait que l'année soit couronnée de succès pour tout le monde et a donc pris une bagatelle de la table de nuit, l'a généreusement versée dans la tarte, tandis que les adultes se détournaient. Apparemment, dans l'espoir que l'année prochaine soit tout aussi riche en legos, il y a également placé une figure du designer. Bien sûr, la tarte est sortie avec tellement d’argent que nous ne pouvions pas la manger, mais cette année s’est avérée vraiment heureuse et pleine de bons souvenirs! »

5. "Nouvel an dans le style des Tortues Ninja Teenage Mutant"

"Je ne peux pas dire que l'histoire est drôle ou triste, mais elle évoque mes plus beaux souvenirs. J'avais six ans, et j'avais vu assez de tortues ninja, je les jouais, mais ce qui était là, j'étais moi-même une tortue ninja (dans mes pensées). Qu'est-ce qu'ils aiment? C'est vrai - pizza! Et c'est ce plat que j'ai demandé à ma mère pour la table du Nouvel An, et comme il n'y avait pas assez d'argent, ma mère a commencé à sortir et à cuire des pizzas. Avec hareng et fromage fondu "Friendship". Ce jour-là, je me suis assis sous les guirlandes, j'ai bu du Pepsi et j'ai mangé de la pizza au hareng. J'étais content. "

Félicitations aux auteurs! Nous sommes tristes de ne pouvoir donner des sets à tout le monde, tout le monde. Mais envoyez les rayons d'amour (et le code promotionnel Picabu) Que la nouvelle année soit encore plus chaude et plus confortable. Toutes les mandarines!

Origine de la vue et de la description

Photo: Mesh Python

Le python réticulé a été décrit pour la première fois en 1801 par le naturaliste allemand I. Gottlob. Le nom d'espèce "reticulatus" est traduit du latin par "mesh", et est une référence à un schéma de couleurs complexe. Le nom général Python a été proposé par le naturaliste français F. Dowden en 1803.

Dans une étude génétique de 2004 sur l'ADN, il a été constaté que le python réticulé est plus proche du python d'eau et non du python tigre, comme on le pensait précédemment. En 2008, Leslie Rawlings et ses collègues ont réanalysé les données morphologiques et, en les combinant avec du matériel génétique, ont constaté que le genre net est une ramification de la lignée de python aquatique.

Vidéo: Python réticulé

Basé sur des études de génétique moléculaire, le python net est officiellement répertorié depuis 2014 sous le nom scientifique Malayopython reticulans.

Au sein de cette espèce, trois sous-espèces peuvent être distinguées:

  • malayopython reticulans reticulans, qui est un taxon nominotypique,
  • malayopython reticulans saputrai, originaire de certaines parties des îles indonésiennes de Sulawesi et Selayar,
  • malayopython reticulans jampeanus ne se trouve que sur l'île de Jampea.

L'existence de sous-espèces peut s'expliquer par le fait que le python réticulé est distribué sur des zones assez étendues et est situé sur des îles distinctes. Ces populations de serpents sont isolées et il n'y a aucun mélange génétique avec d'autres. Une quatrième sous-espèce possible, située sur l'île de Sangihe, est actuellement à l'étude.

Python est un langage à succès commercial

Il est bon de savoir que Python est utilisé non seulement dans les milieux universitaires et amateurs, mais aussi dans les entreprises. Les entreprises lui font confiance avec de l'argent. De nombreuses entreprises utilisent Python - Google, Paypal, Instagram, NASA.

Python crée des emplois. Il existe de nombreux postes vacants, y compris en Russie. Python est un langage industriel. Il est à égalité avec Pluses et Java en demande. Un développeur Python a la chance d'entrer dans un véritable développement de produit. Ce n'est pas un substitut à la consommation locale comme 1C.

Python est un langage très simple

Cependant, Python est extrêmement facile à apprendre. Les bases sont apprises en une semaine. Une autre semaine prendra des packages et un environnement de formation. En conséquence, en moins d'un mois, vous pouvez obtenir une place dans le projet.

Python a peu de sujets compliqués. J'appelle donc les divisions de la langue, dont l'étude nous habitons séparément. En Lisp, un point délicat est les macros. Il y a plus dans le Rock - traits, implications, objets composites. En Python, deux - décorateurs et métaclasses. Dans le travail quotidien, les métaclasses ne sont pas nécessaires, il ne reste donc qu'une seule difficulté. Après avoir traité avec des décorateurs, vous ne rencontrerez pas d'autres obstacles dans la langue.

Python rapproche la programmation des gens

Je n'ai jamais vu personne mentionner cet article. Python est devenu un langage avec lequel tout ingénieur, scientifique ou technicien sans compétences en programmation peut résoudre des problèmes de niveau industriel. Python est un outil de résolution de problèmes.

Des projets spéciaux et des livres ont été publiés, par exemple Python For Engineers, A Primer on Scientific Programming with Python et d'autres. Au travail, j'ai vu des scripts Python écrits par des gens qui avaient réduit toutes leurs connaissances en programmation à un programme scolaire. Mais les scripts ont fonctionné, automatisé le travail, ce qui signifie qu'ils ont économisé du temps et de l'argent.

Avec Python, conduire une voiture est devenu plus facile. Pour chaque tâche, il existe un copier-coller du débordement de pile. Peu importe ce que vous cherchez sur Google - brisez la ligne, créez un graphique, multipliez la matrice - dans les trois premiers liens de l'émission, il y aura certainement une solution.

Bien sûr, un tel style n'est pardonné qu'aux non-programmeurs, lorsqu'il est important d'obtenir un résultat, plutôt que du code pris en charge fiable.

Python est un moyen facile d'entrer dans le développement industriel.

Rappelle à la thèse comment entrer dans le show business au lit. Si vous faites quelque chose de proche de l'informatique, par exemple, l'administration, les réseaux, le support, 1C ou d'anciens langages comme Delphi, alors Python est un ticket de chance. À partir des points ci-dessus, nous avons découvert qu'il s'agit d'un langage facile au niveau industriel. Il deviendra peut-être le train en marche du train au départ, sur lequel vous aurez le temps de sauter avant de vouloir changer quelque chose et le surmonter.

Le paragraphe ci-dessus, j'ai en fait raconté mon histoire. Avant de rencontrer Python, j'ai travaillé sur des sites sur CMS, Delphi et 1C. Bien sûr, avec cela, vous pouvez trouver un emploi. Cependant, c'est aux dépens de Python que j'ai avancé sur mon ancien travail, puis j'ai déménagé dans une autre ville sur 6 000 km et je me suis retrouvé à Dataart. Plus tard, trouvé udalenka en Europe.

Python prend en charge tous les paradigmes de programmation

Python est étonnamment flexible. Sa conception et sa syntaxe prennent également en charge la plupart des paradigmes. POO standard, approche impérative, procédural-modulaire, fonctionnel.

Chaque paradigme est mis en œuvre de manière incomplète. Donc, dans la POO, il n'y a pas de variables et d'interfaces privées. Le double soulignement est un hack et se gère à la fois. Les interfaces sont écrites avec des mixins, mais il est impossible de suivre le suivi exact de l'interface.

Pour un FP à part entière, il n'y a pas assez de lambdas à part entière et de collections immuables. Dans les trois premiers, la fonction de réduction était cachée dans les entrailles de la bibliothèque standard.

L'informatique paresseuse, les décorateurs et la surcharge des opérateurs ouvrent la voie à des manœuvres intéressantes. Python imite différents langages, par exemple:

Fake Lisp est un pseudo-Lisp, une tentative amusante d'écrire du code de type python avec des expressions S.

Hask - Zakos sous la syntaxe Haskell. Il est très utile pour les buveurs d'animaux de compagnie de voir quelles astuces l'auteur a suivies afin d'obtenir une similitude aussi exacte.

fn.py - nishtyaki fonctionnel du Rock. De même, il est très intéressant de voir ce qui se cache sous le capot.

Une question raisonnable, pourquoi une telle flexibilité? Ma réponse est d'affiner les modèles et les approches, d'élargir mes horizons et d'adopter les meilleures pratiques à partir d'autres langages et plateformes.

Par exemple, une fonction de Cluti portée sur Python permettra d'économiser beaucoup de lignes de code et d'éliminer les bogues gênants. Ou, après avoir rencontré un nouveau modèle, j'essaie de l'implémenter en Python pour évaluer à quel point il s'entend avec un grand projet.

Terminez avec les avantages. Python n'est pas parfait. Je vois les inconvénients suivants:

Défauts mineurs avec la syntaxe

Python a une syntaxe laconique sans crochets, points-virgules et autres guirlandes inutiles, la bonne machine et pas une personne. Néanmoins, il reste des moyens de tirer sur la jambe et de vérifier l'heure du débogage, sans comprendre ce qui se passait.

Formation d'un tuple. Peut-être que quelqu'un ne sait pas que les parenthèses autour du tuple sont symboliques. En fait, il est défini par une virgule. Il y a un problème de tuple avec un élément:

J'ai oublié la virgule - j'ai reçu non pas un tuple, mais un chiffre. Laissé une virgule sur la queue - pas un nombre, mais un tuple. Pas effrayant, le code tombera en raison de différents types. La douleur commencera quand un tuple de rangées. Une chaîne et un tuple se prêtent à des opérations générales: itération, accès par index, tranche. Le code fonctionne sans plantages, mais produit un résultat incorrect. À cause d'une virgule.

L'exemple suivant. Deux lignes consécutives sans virgule fusionnent en une seule. Cela signifie un tuple

car il n'y a pas de virgule après «erreur». La vérification de «l'erreur» dans les statuts renvoie False, ce qui constitue une violation directe de la logique métier.

Le code Python est très fragile et doit être largement couvert par des tests. Au cours de la sixième année de travail avec lui, je ne sais toujours pas si tel ou tel morceau de code fonctionnera correctement sans test.

Leadership de la POO

Bien que Python prenne en charge de nombreux paradigmes, la POO reste le principal. Un cadre ou une bibliothèque typique est une collection de classes qui stockent l'état et se changent mutuellement.

Avez-vous déjà dégradé Django? Je le suis. C'était une autorisation de backend personnalisée. Le débogage a duré plus d'une heure et ressemblait à une session BSDM.

Les objets Requête, Réponse, Utilisateur, Session organisent un péché total. Définissez plusieurs fois les liens d'amis. Ils montent dans la cache pour une raison quelconque.

Conditions de backend d'autorisation très étranges. La méthode .get_user () renvoie l'objet utilisateur. Ensuite, cet utilisateur est perdu quelque part, il n'y a aucun lien avec lui. Le système demande la méthode .get_user_by_id (). J'ai déjà abandonné l'utilisateur, un club! Vous devez donc soit remonter dans la base de données ou le réseau, soit stocker un dictionnaire dans la classe qui n'est pas un thread-safe.

Pour une raison quelconque, dans Klage avec ses collections immuables, je n'ai jamais eu à monter dans une session, demander ou répondre rétroactivement et y éditer quelque chose. Les modifications de la collection sont uniquement avancées.

Je n'appelle pas à une programmation dans un style FP solide. Franchement, tous ces articles dans l'esprit de «Programmation en Python dans un style fonctionnel» semblent pathétiques. Réduit et lambdas à trois étages sont complètement tirés par les oreilles. Un tel code ne coexiste pas dans le cadre du projet et sera supprimé, même s'il peut en quelque sorte être glissé.

Cela endommage la programmation fonctionnelle. Il existe une idée fausse répandue selon laquelle les AF sont des cartes et des lambdas.

En Python, ce serait bien d'ajouter quelque chose qui encourageait l'abandon de l'État. Par exemple, un dictionnaire immuable, plus de fonctions pour travailler avec des collections.

Cependant, cela aurait été une langue complètement différente.

Basse vitesse

Il y a un an, il a dit que ce n'était pas du tout un inconvénient. La mémoire est bon marché, l'hébergement est bon marché et d'autres excuses. Aujourd'hui, je considère une telle réponse comme le lot d'un amateur.

La vitesse d'exécution est importante. Imaginez que tous vos logiciels sur l'ordinateur soient écrits en Python. Il aurait travaillé 20 à 30 fois plus lentement, aurait dû oublier les jeux et Photoshop. Ce n'est pas seulement un pas en arrière, mais un retour en arrière sur plusieurs générations.

Récemment, j'ai dû analyser le journal Nginx, Google a publié l'utilitaire ngxtop. Je n'ai pas regardé sur quoi il était écrit, je l'ai mis dans les paquets. Elle a traité le journal gigaoctet pendant une heure. Il s'est avéré que c'était Python. L'utilitaire sur C analysé en 5 minutes. Le mauvais choix était une perte de temps.

Python a mis du temps à se développer. Oui, c'est plus lent, mais nous le déploierons plus tôt que le concurrent en Java. Et maintenant, il existe des langages qui combinent la vitesse du code et la vitesse de développement. Si vous écrivez X et Y à peu près en même temps et que Y s'exécute 5 fois plus vite, pourquoi prendre X?

À propos du fer supplémentaire. Dire que placer le deuxième nœud est une affaire insignifiante ne peut être fait que par quelqu'un qui écrit le code et ne touche pas au déploiement. Plusieurs nœuds sont un système distribué. Nous avons besoin d'un équilibreur, d'une séparation des journaux, de problèmes de synchronisation, de mises à jour cohérentes.

Dans mon projet personnel, Python a vécu longtemps, la charge augmentait constamment. Le serveur s'étouffait, je n'ai pas eu le temps de relever le plan tarifaire. Puis il cracha et le réécrit sur Claude. Je n'oublierai pas ce sentiment lorsque le graphique du CPU est passé de 80 à 20%.

Ils reprochent à GIL l’esprit «vous n’en avez pas besoin», «utilisez des processus». J'ai donc dit jusqu'à ce que je sache comment fonctionne le multithreading dans les langages fonctionnels.

Nous exécutons une application Web en Python sous uWSGI comme ceci. Le processus maître démarre. Il gère les travailleurs, les processus dans chacun desquels est une application web. 16 Jungs sont lancés à la fois, chacun répondant lorsque l'autre est occupé.

Le processus maître garantit que tout le monde est égal. Tue ceux qui ne répondent pas, trop gourmands en mémoire ou surchargés de travail - a établi une limite de requête.

Je trouve cette méthode moche. Premièrement, il y a une méfiance envers la technologie et son comportement instable. Avec un fonctionnement prolongé, les processus se déroulent, même un processus maître. Cela signifie que le système doit être redémarré.

La parallélisation sur les processus prive l'accès à la mémoire partagée, forçant à utiliser des substituts comme Memcache ou Redis, tandis que le cache le plus efficace est la mémoire partagée.

Des processus maîtres tels que uWSGI et Green Unicorn sont des étapes supplémentaires dans la chaîne le long de laquelle la demande passe. E / S superflues, un point d'enregistrement et de chute.

Enfin, rien ne peut être mis en parallèle avec GIL, à l'exception des requêtes réseau. Les langages fonctionnels n'ont pas ces défauts. L'immuabilité des collections dans le placard, le système de canaux de Gow vous permettent de piloter le multithreading sans craindre de vous tirer la jambe. Cela crache toute une couche d'infrastructure: des béquilles sous forme de files d'attente, de travailleurs et de scripts de couronne. Et des systèmes supplémentaires pour supporter tout cela.

Difficultés de diffusion

Une application écrite en Python est difficile à distribuer. Un petit script nécessite un interprète d'une certaine version, un environnement virtuel avec un tas de bibliothèques. Il n'y a pas de réponse exacte à la question de savoir comment transférer l'environnement sur la machine de l'utilisateur.

Il y a quelques années, j'ai essayé différents packers: Py2Exe, PyInstaller, CxFreeze. Seul le dernier a pu compiler l'application pour Windu sans erreur. Je l'ai très bien fait: j'ai lancé un programme d'installation * .msi, enregistré un service système. Mais il a fallu beaucoup de temps pour construire et lire les quais. Pourquoi les développeurs de Python ne prennent-ils pas la peine d'inclure un système de distribution pour le produit final dans la boîte?

Pour écrire un script, exécutez l'assembly et récupérez l'archive avec le fichier exécutable. Pourquoi les langages fonctionnels peuvent faire cela, mais pas Python?

Colet donne uberjar. Je le récupère sur le Mac, le télécharge sur l'hébergement, où il n'y a rien d'autre que Java - cela fonctionne sans problème. Haskell compile en binar. Missiles, Rast - aussi. Common Lisp, 30 ans, Carl, décharge une machine Lisp dans un fichier binaire!

En fait, pour exécuter une application Web en Python, vous devez disposer d'environ 10 000 fichiers * .py. S'il n'y en a pas, le système ne démarre pas. Il est possible d'isoler cette variété par Docker, mais nous sommes ici en train de tordre l'âme.

En parcourant la documentation du troisième Python, j'ai trouvé un module zipapp intéressant. Dans la première minute, j'ai pensé que je reprochais ma langue en vain, que l'affaire avait décollé. Il s'est avéré que le module ne prend pas en charge les environnements virtuels et les bibliothèques de bibliothèques. Je n'ai pas pu créer une application simple avec le pilote Postgres.

Qu'est-ce que Python?

Je n'entrerai pas dans l'histoire de la création et du développement du langage, vous pouvez facilement le découvrir grâce à la vidéo qui sera jointe ci-dessous. Il est important de noter que Python est un langage de script. Cela signifie que votre code est vérifié pour les erreurs et exécuté immédiatement sans aucune compilation ou traitement supplémentaire. Cette approche est également appelée interprétée.

Cela réduit les performances, mais est très pratique. Il y a un interprète dans lequel vous pouvez entrer des commandes et voir immédiatement leur résultat. Un tel travail interactif aide grandement à l'apprentissage.

Travailler dans l'interprète

L'exécution de l'interpréteur Python est très simple sur n'importe quel système d'exploitation. Par exemple, sous Linux, tapez simplement la commande python dans le terminal:

Dans l'invite du shell qui s'ouvre, nous voyons la version de Python actuellement utilisée. De nos jours, deux versions de Python 2 et Python 3 sont très répandues: elles sont toutes les deux populaires car la première a développé de nombreux programmes et bibliothèques, et la seconde a plus de fonctionnalités. Par conséquent, les distributions incluent les deux versions. Par défaut, la deuxième version est lancée. Mais si vous avez besoin de la version 3, vous devez faire:

C'est la troisième version qui sera considérée dans cet article. Considérez maintenant les principales caractéristiques de cette langue.

3. Combinaison avec transformation

Vous pouvez combiner une chaîne avec un nombre ou un booléen. Mais pour cela, vous devez utiliser la conversion. Il existe une fonction str () pour cela:

str = "Ceci est un numéro de test" + str (15)
imprimer (str)

4. Recherche de sous-chaîne

Vous pouvez rechercher un caractère ou une sous-chaîne à l'aide de la méthode find:

str = "Bienvenue sur losst.ru"
print (str.find ("losst.ru"))

Cette méthode affiche la position de la première occurrence de la sous-chaîne losst.ru si elle est trouvée, si rien n'est trouvé, la valeur -1 est retournée. La fonction démarre la recherche avec le premier caractère, mais vous pouvez commencer avec le nième, par exemple, 26:

str = "Bienvenue sur losst.ru"
print (str.find ("losst", 26))

Dans cette option, la fonction renverra -1, car la chaîne n'a pas été trouvée.

5. Obtenir une sous-chaîne

Nous avons obtenu la position de la sous-chaîne que nous recherchons, et maintenant comment obtenir la sous-chaîne elle-même et que rechercher après? Utilisez cette syntaxe pour cela. début: fin, spécifiez simplement deux nombres ou seulement le premier:

str = "Un deux trois"
imprimer (str: 2)
imprimer (str2 :)
impression (str3: 5)
imprimer (str-1)

La première ligne affichera une sous-chaîne du premier au deuxième caractère, le second - du deuxième à la fin. Veuillez noter que le compte à rebours commence à zéro. Pour compter en sens inverse, utilisez un nombre négatif.

6. Remplacement de la sous-chaîne

Vous pouvez remplacer une partie d'une chaîne par la méthode replace:

str = "Ce site concerne Linux"
str2 = str.replace ("Linux", "Windows")
imprimer (str2)

S'il y a plusieurs occurrences, seule la première peut être remplacée:

str = "Ceci est un site Linux et je suis abonné à ce site"
str2 = str.replace ("site", "page", 1)
imprimer (str2)

7. Effacement des chaînes

Vous pouvez supprimer des espaces supplémentaires avec la fonction de bande:

str = "Ceci est un site Web Linux"
imprimer (str.strip ())

Vous pouvez également supprimer des espaces supplémentaires uniquement sur la bande droite ou uniquement sur la bande gauche.

9. Convertir des chaînes

Il existe plusieurs fonctions pour convertir des chaînes en différents types numériques, à savoir int (), float (), long () et d'autres. La fonction int () est convertie en entier et float () en nombre à virgule flottante:

str = "10"
str2 = "20"
imprimer (str + str2)
print (int (str) + int (str2))

10. Longueur de ligne

Vous pouvez utiliser les fonctions min (), max (), len () pour calculer le nombre de caractères dans une chaîne:

str = "Bienvenue à Losst"
impression (min (str))
impression (max (str))
impression (len (str))

Le premier indique la taille minimale des caractères, le second le maximum et le troisième la longueur totale de la chaîne.

11. Itération sur une chaîne

Vous pouvez accéder à chaque caractère d'une chaîne séparément avec une boucle for:

str = "Bienvenue sur le site"
pour i dans la plage (len (str)):
imprimer (stri)

Pour limiter la boucle, nous avons utilisé la fonction len (). Faites attention à l'indentation. La programmation en python est basée sur cela, il n'y a pas de crochets pour organiser les blocs, seulement des retraits.

2. Génération de nombres aléatoires

Vous pouvez obtenir des nombres aléatoires en utilisant le module aléatoire:

importer au hasard
imprimer (random.random ())

Par défaut, un nombre est généré à partir d'une plage de 0,0 à 1,0. Mais vous pouvez définir votre gamme:

importer au hasard
nombres = 1,2,3,4,5,6,7
impression (random.choice (nombres))

Opérations de date et d'heure

Le langage de programmation Python possède un module DateTime qui vous permet d'effectuer diverses opérations avec la date et l'heure:

importer datetime
cur_date = datetime.datetime.now ()
print (cur_date)
print (cur_date.year)
imprimer (cur_date.day)
print (cur_date.weekday ())
print (cur_date.month)
print (cur_date.time ())

L'exemple montre comment extraire la valeur souhaitée de l'objet. Vous pouvez obtenir la différence entre deux objets:

importer datetime
time1 = datetime.datetime.now ()
time2 = datetime.datetime.now ()
timediff = time2 - time1
impression (timediff.microseconds)

Vous pouvez créer vous-même des objets de date avec une valeur arbitraire:

time1 = datetime.datetime.now ()
time2 = datetime.timedelta (jours = 3)
time3 = time1 + time2
print (time3.date ())

1. Formatage de la date et de l'heure

La méthode strftime vous permet de modifier le format de la date et de l'heure en fonction de la norme sélectionnée ou du format spécifié. Voici les caractères de mise en forme de base:

  • % a - jour de la semaine, nom abrégé,
  • % A - jour de la semaine, nom complet,
  • % w - numéro du jour de la semaine, de 0 à 6,
  • % d - jour du mois
  • % b - nom abrégé du mois,
  • % B - nom complet du mois,
  • % m - numéro du mois
  • % Y - numéro d'année
  • % H - heure du jour au format 24 heures,
  • % l - heure du jour au format 12 heures,
  • % p - AM ou PM,
  • % M - une minute
  • % S - deuxième.

importer datetime
date1 = datetime.datetime.now ()
print (date1.strftime ('% d.% B% Y% I:% M% p '))

2. Créez une date à partir d'une chaîne

Vous pouvez utiliser la fonction strptime () pour créer un objet date à partir d'une chaîne:

importer datetime
date1 = datetime.datetime.strptime ("2016-11-21", "% Y-% m-% d")
date2 = datetime.datetime (année = 2015, mois = 11, jour = 21)
imprimer (date1),
impression (date2),

1. Copier des fichiers

Pour copier des fichiers, vous devez utiliser les fonctions du module subutil:

importer shutil
new_path = shutil.copy ('file1.txt', 'file2.txt')

Si file1 est un lien symbolique, l'opération de copie créera toujours un fichier séparé. Si vous souhaitez copier un lien symbolique, utilisez cette construction:

new_path = shutil.copy ('file1.txt', 'file2.txt', follow_symlinks = False)

3. Lecture et écriture de fichiers texte

Vous pouvez utiliser les fonctions intégrées pour ouvrir des fichiers, lire ou y écrire des données:

fd = open ('file1.txt')
content = fd.read ()
imprimer (contenu)

Vous devez d'abord ouvrir le fichier pour travailler à l'aide de la fonction d'ouverture. La fonction de lecture est utilisée pour lire les données d'un fichier, le texte lu sera enregistré dans une variable. Vous pouvez spécifier le nombre d'octets à lire:

fd = open ('file1.txt')
content = fd.read (20)
imprimer (contenu)

Si le fichier est trop volumineux, vous pouvez le diviser en lignes et déjà effectuer le traitement:

content = fd.readlines ()
imprimer (contenu)

Pour écrire des données dans un fichier, vous devez d'abord l'ouvrir pour l'écriture. Il existe deux modes de fonctionnement: écraser et ajouter à la fin du fichier. Mode d'enregistrement:

fd = open ('file1.txt', 'w')
content = fd.write ('Nouveau contenu')

Et en ajoutant à la fin du fichier:

fd = open ('file1.txt', 'a')
content = fd.write ('Nouveau contenu')

5. Obtenir le temps de création

Vous pouvez utiliser les fonctions getmtime (), getatime () et getctime () pour obtenir l'heure de la dernière modification, du dernier accès et de la création. Le résultat sera affiché au format Unix, il doit donc être converti en un format lisible:

importer os
importer datetime
tim = os.path.getctime ('./ file1.txt')
print (datetime.datetime.fromtimestamp (tim))

6. Liste des fichiers

En utilisant la fonction listdir (), vous pouvez obtenir une liste de fichiers dans un dossier:

importer os
files = os.listdir ('.')
imprimer (fichiers)

Pour résoudre le même problème, vous pouvez utiliser le module glob:

importer glob
files = glob.glob ('*')
imprimer (fichiers)

7. Sérialisation d'objets Python

La sérialisation vous permet d'enregistrer l'objet dans une chaîne, pour sa restauration ultérieure. Pour ce faire, utilisez le module pickle:

cornichon d'importation
fd = open ('monfichier.pk', 'wb')
pickle.dump (mydata, fd)

Ensuite, pour restaurer l'objet, utilisez:

cornichon d'importation
fd = open ('monfichier.pk', 'rb')
mydata = pickle.load (fd)

8. Compression de fichiers

La bibliothèque standard Python vous permet de travailler avec différents formats d'archives, par exemple, zip, tar, gzip, bzip2. Pour afficher le contenu d'un fichier, utilisez:

importer un fichier zip
my_zip = zipfile.ZipFile ('my_file.zip', mode = 'r')
print (file.namelist ())

Et pour créer une archive zip:

importer un fichier zip
file = zipfile.ZipFile ('files.zip', 'w')
file.write ('file1.txt')
file.close ()

Vous pouvez également décompresser l'archive:

importer un fichier zip
file = zipfile.ZipFile ('files.zip', 'r')
file.extractall ()
file.close ()

Vous pouvez ajouter des fichiers à l'archive comme ceci:

importer un fichier zip
file = zipfile.ZipFile ('files.zip', 'a')
file.write ('file2.txt')
file.close ()

9. Analyse des fichiers CSV et Exel

À l'aide du module pandas, vous pouvez afficher et analyser le contenu des tables CSV et Exel. Vous devez d'abord installer le module à l'aide de pip:

sudo pip installer des pandas

Ensuite, pour analyser, tapez:

importer des pandas
data = pandas.read_csv ('file.csv)

Par défaut, pandas utilise la première colonne pour les en-têtes de chaque ligne. Vous pouvez spécifier une colonne pour l'index à l'aide du paramètre index_col ou spécifier False si ce n'est pas nécessaire. Pour écrire des modifications dans un fichier, utilisez la fonction to_csv:

De la même manière, vous pouvez analyser le fichier Exel:

data = pd.read_excel ('file.xls', sheetname = 'Sheet1')

Si vous devez ouvrir toutes les tables, utilisez:

Ensuite, vous pouvez réécrire toutes les données:

Réseautage en Python

La programmation Python 3 implique souvent la mise en réseau. La bibliothèque standard Python comprend des sockets pour un accès réseau de bas niveau. Cela est nécessaire pour prendre en charge de nombreux protocoles réseau.

prise d'importation
hôte = '192.168.1.5'
port = 4040
my_sock = socket.create_connection ((hôte, port))

Ce code se connecte au port 4040 sur la machine 192.168.1.5. Lorsque le socket est ouvert, vous pouvez envoyer et recevoir des données:

Nous devons écrire le caractère b, avant la ligne, car nous devons transférer des données en mode binaire. Si le message est trop volumineux, vous pouvez répéter:

msg = b «Un message plus long va ici»
mesglen = len (msg)
total = 0
tout au total

Pour obtenir les données, vous devez également ouvrir le socket, seule la méthode my_sock_recv est utilisée:

Ici, nous indiquons la quantité de données dont vous avez besoin pour obtenir - 20 000, les données ne seront pas transférées vers la variable tant que 20 000 octets de données n'auront pas été reçus. Si le message est plus grand, pour le recevoir, vous devez créer une boucle:

buffer = bytearray (b '' * 2000)
my_sock.recv_into (tampon)

Si le tampon est vide, le message reçu y sera écrit.

1. Recevoir du courrier d'un serveur POP3

Pour recevoir des messages, nous utilisons le serveur POP:

import getpass, poplib
pop_serv = poplib.POP3 ('192.168.1.5')
pop_serv.user ("monutilisateur")
pop_serv.pass_ (getpass.getpass ())

Le module getpass vous permet de récupérer le mot de passe de l'utilisateur de manière sécurisée, afin qu'il ne soit pas affiché à l'écran. Si le serveur POP utilise une connexion sécurisée, vous devez utiliser la classe POP3_SSL. Si la connexion réussit, vous pouvez interagir avec le serveur:

msg_list = pop_serv.list () # pour lister les messages
msg_count = pop_serv.msg_count ()

Pour terminer le travail, utilisez:

2. Recevoir du courrier d'un serveur IMAP

Pour se connecter et travailler avec le serveur IMAP, le module imaplib est utilisé:

importer imaplib, getpass
my_imap = imaplib.IMAP4 ('imap.server.com')
my_imap.login ("myuser", getpass.getpass ())

Si votre serveur IMAP utilise une connexion sécurisée, vous devez utiliser la classe IMAP4_SSL. Pour une liste de messages, utilisez:

data = my_imap.search (Aucun, 'TOUS')

Ensuite, vous pouvez parcourir la liste sélectionnée et lire chaque message:

msg = my_imap.fetch (email_id, '(RFC822)')

Mais n'oubliez pas de fermer la connexion:

3. Envoi de courrier

Pour envoyer du courrier, le protocole SMTP et le module smtplib sont utilisés:

importer smtplib, getpass
my_smtp = smtplib.SMTP (smtp.server.com ')
my_smtp.login ("myuser", getpass.getpass ())

Comme précédemment, utilisez SMTP_SSL pour une connexion sécurisée. Une fois la connexion établie, vous pouvez envoyer un message:

from_addr = '[email protected]'
to_addr = '[email protected]'
msg = 'De: [email protected] r nÀ: [email protected] r n r nBonjour, ceci est un message de test'
my_smtp.sendmail (from_addr, to_addr, msg)

1. Exploration Web

Le module urllib vous permet d'interroger des pages Web de différentes manières. Pour envoyer une demande régulière, la classe de demande est utilisée. Par exemple, nous exécutons une demande de page régulière:

import urllib.request
my_web = urllib.request.urlopen ('https://www.google.com')
print (my_web.read ())

2. Utilisation de la méthode POST

Si vous devez soumettre un formulaire Web, vous devez utiliser non pas une demande GET, mais un POST:

import urllib.request
mydata = b'Vos données vont ici '
my_req = urllib.request.Request ('http: // localhost', data = mydata, method = 'POST')
my_form = urllib.request.urlopen (my_req)
impression (my_form.status)

3. Création d'un serveur Web

En utilisant la classe Socket, vous pouvez accepter les connexions entrantes, ce qui signifie que vous pouvez créer un serveur Web avec des fonctionnalités minimales:

prise d'importation
hôte = ''
port = 4242
mon_serveur = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
mon_serveur.bind ((hôte, port))
my_server.listen (1)

Lorsque le serveur est créé. vous pouvez commencer à accepter les connexions:

addr = mon_serveur.accept ()
print ('Connecté depuis l'hôte', addr)
data = conn.recv (1024)

Et n'oubliez pas de fermer la connexion:

Multithreading

Comme la plupart des langages modernes, Python vous permet d'exécuter plusieurs threads parallèles, ce qui peut être utile si vous devez effectuer des calculs complexes. La bibliothèque standard possède un module de thread qui contient la classe Therad:

importation de threads
def print_message ():
print ('Le message a été imprimé à partir d'un fil différent')
my_thread = threading.Thread (target = print_message)
my_thread.start ()

Si la fonction fonctionne trop longtemps, vous pouvez vérifier si tout est en ordre en utilisant la fonction is_alive (). Parfois, vos threads doivent accéder aux ressources globales. Pour cela, des verrous sont utilisés:

importation de threads
num = 1
my_lock = threading.Lock ()
def my_func ():
num global, my_lock
my_lock.acquire ()
somme = num + 1
impression (somme)
my_lock.release ()
my_thread = threading.Thread (target = my_func)
my_thread.start ()

Conclusions

Dans cet article, nous avons couvert les bases de la programmation python. Vous connaissez maintenant la plupart des fonctions couramment utilisées et pouvez les utiliser dans vos petits programmes. Vous adorerez la programmation en Python 3, c'est très simple! Si vous avez des questions, posez-les dans les commentaires!

À la fin de l'article, une excellente conférence sur Python:

Apparence et caractéristiques

Photo: Big Mesh Python

Le python réticulé est un serpent géant qui vit en Asie. La longueur corporelle moyenne et le poids corporel moyen sont respectivement de 4,78 m et 170 kg. Certains individus atteignent une longueur de 9,0 m et un poids de 270 kg. Bien que les pythons réticulés de plus de 6 m de long soient rares, cependant, selon le Guinness Book of Records, il s'agit du seul serpent existant qui dépasse régulièrement cette longueur.

Le python réticulé a une couleur de corps allant du jaune clair au brun avec des lignes noires s'étendant de la région ventrale des yeux en diagonale vers le bas vers la tête. Une autre ligne noire est parfois présente sur la tête du serpent, s'étendant de l'extrémité du museau à la base du crâne ou de la nuque. Le motif de couleur du python maillé est un motif géométrique complexe qui comprend différentes couleurs. Le dos a généralement un certain nombre de formes irrégulières en forme de diamant, entourées de petites marques avec des centres clairs.

Fait intéressant: Dans la vaste zone géographique de cette espèce, on trouve souvent de grandes différences de taille, de couleur et de marquage.

Au zoo, le motif de couleur peut sembler dur, mais dans l'environnement ombragé de la jungle, parmi les feuilles et les débris tombés, il permet au python de presque disparaître.En règle générale, cette espèce a montré que les femelles deviennent beaucoup plus grandes que les mâles en taille et en poids. La femelle moyenne peut atteindre 6,09 m et 90 kg, contrairement au mâle, qui mesure en moyenne 4,5 m de long et 45 kg.

Vous savez maintenant si le python réticulé est toxique. Voyons où vit le serpent géant.

Où vit le python réticulé?

Photo: Python réticulé serpent

Python préfère un climat tropical et subtropical et aime être près de l'eau. Il vivait à l'origine dans les forêts tropicales et les marécages. À mesure que le défrichement de ces zones devient de plus en plus petit, le python net commence à s'adapter aux forêts secondaires et aux champs agricoles et à vivre très densément avec les gens. De plus en plus, de gros serpents se trouvent dans les petites villes, où ils doivent être déplacés.

En outre, le python net peut habiter près des rivières et se trouve dans les zones avec des ruisseaux et des lacs à proximité. C'est un excellent nageur qui peut nager loin dans la mer, le serpent a donc colonisé de nombreuses petites îles de son aire de répartition. On dit qu'au début du 20e siècle, le python net était un visiteur régulier, même dans la ville animée de Bangkok.

La gamme de python réticulé s'étend en Asie du Sud:

En outre, l'espèce est répandue aux îles Nicobar, ainsi que: Sumatra, un groupe d'îles Mentawai, 272 îles de Natuna, Bornéo, Sulawesi, Java, Lombok, Sumbawa, Timor, Maluku, Sumba, Flores, Bohol, Cebu, Leite, Mindanao, Mindoro, Luzon, Palawan, Panay, Polillo, Samar, Tavi-Tavi.

Le python réticulé domine dans les forêts tropicales humides, les marécages et les forêts de prairie, à des altitudes de 1 200 à 2 500 m. La température requise pour la reproduction et la survie devrait être comprise entre ≈24 ºC et ≈ 34 ºC en présence d'une grande quantité d'humidité.

Que mange le python maillé?

Photo: Yellow Net Python

Comme tous les pythons, le filet chasse de l'embuscade, attendant que la victime atteigne la distance de la frappe, avant d'attraper la proie avec son corps et de tuer avec compression. On sait qu'il se nourrit de mammifères et de diverses espèces d'oiseaux qui vivent dans sa zone géographique.

Son alimentation naturelle comprend:

Chasse souvent les animaux de compagnie: cochons, chèvres, chiens et volailles. Les porcelets et les enfants pesant de 10 à 15 kg sont inclus dans le régime alimentaire habituel. Cependant, il existe un cas connu où le mesh python avalé j'écris, dont le poids dépassait 60 kg. Il chasse les chauves-souris, les attrape en vol, fixant sa queue sur les irrégularités de la grotte. Les petits individus atteignant 3 à 4 m de long se nourrissent principalement de rongeurs, tels que les rats, et les individus plus gros passent à des proies plus grosses.

Fait intéressant: le python réticulé est capable d'avaler des proies jusqu'à un quart de sa longueur et de son poids. Parmi les plus grandes proies documentées, il y a un ours malais à moitié affamé pesant 23 kg, mangé par un serpent de 6,95 m et il a fallu environ dix semaines pour le digérer.

On pense que les pythons réticulés peuvent s'attaquer aux humains, en raison de nombreuses attaques contre les humains dans la nature et contre les propriétaires de pythons réticulés. Au moins un cas est connu lorsque Python reticulatus est entré dans la maison d’un homme dans une forêt et a emporté un enfant. Pour détecter une proie, le python réticulé utilise des fosses sensibles (organes spécialisés de certaines espèces de serpents) qui détectent la chaleur des mammifères. Cela vous permet de déterminer l'emplacement de la production par rapport à sa température par rapport à l'environnement. En raison de cette fonctionnalité, le python réticulé détecte les proies et les prédateurs sans les voir.

Caractéristiques du caractère et du style de vie

Photo: Mesh Python

Bien qu'ils soient proches des humains, on sait peu de choses sur le comportement de ces animaux. Le python réticulé mène une vie nocturne et passe la majeure partie de la journée à l'abri. Les distances que les animaux parcourent au cours de leur vie, ou s'ils ont des territoires fixes, n'ont pas été étudiées en profondeur. Le python réticulé est un solitaire qui n'entre en contact que pendant la saison des amours.

Ces serpents occupent des zones avec des sources d'eau. Au cours du mouvement, ils sont capables de contracter les muscles et de les libérer simultanément, créant un motif de mouvement de serpent. En raison du mouvement rectiligne et de la grande taille du corps des pythons réticulés, le type de mouvement de serpent dans lequel il comprime son corps puis se déplie dans un mouvement linéaire est observé plus souvent car il permet à des individus plus gros de se déplacer plus rapidement. En utilisant la technique de compression et de redressement, le python peut grimper aux arbres.

Fait intéressant: en utilisant des mouvements corporels similaires, les pythons réticulés, comme tous les serpents, jettent leur peau pour réparer les blessures ou tout simplement pendant les stades de développement. La perte de peau, ou desquamation, est nécessaire pour soulager un corps en croissance constante.

Le python maillé n'entend pratiquement pas de bruit et est visuellement limité en raison des paupières immobiles. Par conséquent, il s'appuie sur son odorat et son toucher pour trouver des proies et éviter les prédateurs. Le serpent n'a pas d'oreilles; il a plutôt un organe spécial qui vous permet de ressentir les vibrations dans le sol. En raison du manque d'oreilles, les serpents et autres pythons doivent utiliser des mouvements physiques pour créer des vibrations par lesquelles ils communiquent entre eux.

Structure sociale et reproduction

Photo: Big Mesh Python

La saison de reproduction du python réticulé dure de février à avril. Peu de temps après l'hiver, les pythons commencent à se préparer à la reproduction en raison de la chaleur prometteuse de l'été. Dans la plupart des régions, la situation géographique affecte le début de la saison. Ainsi, les pythons se reproduisent en fonction des changements climatiques dans une région d'habitat particulière.

La zone de reproduction doit être riche en proies pour que la femelle puisse produire une progéniture. Les pythons réticulés ont besoin de territoires inhabités pour maintenir une reproduction élevée. La viabilité des œufs dépend de la capacité de la mère à les protéger et à les incuber, ainsi qu'à un niveau d'humidité élevé. Les pythons adultes sont généralement prêts à se reproduire lorsque le mâle atteint environ 2,5 mètres de long et environ 3,0 mètres de long pour les femelles. Ils atteignent une telle longueur en 3-5 ans pour les deux sexes.

Faits intéressants: S'il y a beaucoup de nourriture, la femelle produit une progéniture chaque année. Dans les zones où il n'y a pas beaucoup de nourriture, la taille et la fréquence des embrayages sont réduites (une fois tous les 2-3 ans). Au cours d'une année de reproduction, une femelle peut produire 8 à 107 œufs, mais généralement 25 à 50 œufs. Le poids corporel moyen des bébés à la naissance est de 0,15 g.

Contrairement à la plupart des espèces, le python femelle réticulé reste replié sur les œufs à couver pour leur fournir de la chaleur. Grâce au processus de contraction musculaire, la femelle réchauffe les œufs, provoquant une augmentation du taux d'incubation et des chances de survie de la progéniture. Après la naissance, les petits pythons réticulés ne connaissent presque pas les soins parentaux et sont obligés de se défendre et de chercher de la nourriture.

Ennemis naturels des pythons réticulés

Photo: Net python dans la nature

Les pythons réticulés n'ont pratiquement aucun ennemi naturel en raison de leur taille et de leur puissance. Les œufs de serpents et les pythons récemment éclos sont attaqués par des prédateurs tels que les oiseaux (faucons, aigles, hérons) et les petits mammifères. La chasse aux pythons réticulés adultes est limitée aux crocodiles et autres grands prédateurs. Les pythons sont à haut risque d'attaque uniquement au bord des étangs où vous pouvez vous attendre à des attaques d'un crocodile. La seule défense contre les prédateurs, en plus de la taille, est une puissante compression du corps par un serpent, qui peut chasser la vie de l'ennemi en 3-4 minutes.

L'homme est le principal ennemi du python réticulé. Ces animaux sont tués et écorchés pour produire des articles en cuir. On estime qu'un demi-million d'animaux sont tués chaque année à cette fin. En Indonésie, des pythons réticulés sont également consommés. La chasse aux animaux est justifiée par le fait que les résidents veulent protéger leur bétail et leurs enfants contre les serpents.

Le python réticulé est l'un des rares serpents qui s'attaquent aux humains.Ces attaques ne sont pas très courantes, mais cette espèce a fait plusieurs victimes, à la fois en nature et en captivité.

Il est connu de manière fiable sur plusieurs cas:

  • en 1932, un adolescent aux Philippines a été mangé par un python mesurant 7,6 m. Le python s'est enfui de la maison, et quand il a été trouvé, ils ont trouvé à l'intérieur du fils du propriétaire du serpent,
  • en 1995, un grand python en filet a tué Ee Hyun Chuan, 29 ans, de l'État de Johor, dans le sud de la Malaisie. Le serpent s'est enroulé autour d'un corps sans vie avec sa tête serrée dans les mâchoires lorsque le frère de la victime est tombé dessus,
  • en 2009, un garçon de 3 ans de Las Vegas était enveloppé dans une spirale avec un python de 5,5 m de long. Mère a sauvé le bébé en frappant le python avec un couteau,
  • en 2017, le corps d'un fermier indonésien de 25 ans a été retrouvé à l'intérieur de l'estomac d'un filet de python de 7 mètres. Le serpent a été tué et le corps enlevé. Ce fut le premier cas entièrement confirmé lorsqu'un python se nourrissait d'humains. Le processus d'extraction du corps a été documenté à l'aide de photographies et de vidéos,
  • en juin 2018, un Indonésien de 54 ans a été mangé par un python de 7 mètres. Elle a disparu alors qu'elle travaillait dans son jardin, et le lendemain, l'équipe de recherche a trouvé un python près du jardin avec un renflement sur son corps. Une vidéo d'un serpent éviscéré a été publiée en ligne.

Statut de la population et des espèces

Photo: Python réticulé serpent

Le statut de la population de python réticulé est très différent à différents endroits de l'aire de répartition géographique. Il y a beaucoup de ces serpents en Thaïlande, où ils rampent dans les maisons des gens pendant la saison des pluies. Aux Philippines, il s'agit d'une espèce très répandue, même dans les zones résidentielles. La sous-population philippine est considérée comme stable et même en augmentation. Les pythons réticulés sont rares au Myanmar. Au Cambodge, la population a également décliné et diminué de 30 à 50% en dix ans. Les représentants du genre sont très rares au Vietnam à l'état sauvage, mais de nombreux individus ont été trouvés dans le sud du pays.

Fait intéressant: le python réticulé n'est pas en danger, cependant, selon l'annexe CITES II, la vente et la vente de sa peau sont réglementées pour assurer sa survie. Cette espèce n'est pas inscrite sur la Liste rouge de l'UICN.

On pense que le python reste commun dans le sud de ce pays, où il existe un habitat convenable, y compris des zones protégées. Déclin probable au Laos. La réduction à travers l'Indochine a été causée par la conversion des terres. Le python réticulé est encore une espèce relativement commune dans de nombreuses régions du Kalimantan. Les sous-populations de Malaisie et d'Indonésie sont stables, malgré une pêche intensive.

Python maillé reste courante à Singapour, malgré l'urbanisation, où la pêche de cette espèce est interdite. Au Sarawak et à Sabah, cette espèce est commune à la fois dans les zones résidentielles et naturelles, et rien n'indique une diminution de la population. Les problèmes causés par le défrichage et l'exploitation des habitats peuvent être compensés par une augmentation des plantations de palmiers à huile, car le serpent python serpente bien dans ces habitats.

Regardez la video: APPRENDRE LE PYTHON #1 ? LES BASES & PREREQUIS (Mars 2020).

Pin
Send
Share
Send