Effectuer une recherche google sur "pythonic" révèle un large éventail d’interprétations. La page wikipedia dit:
Un néologisme courant dans la communauté Python est Pythonic, qui peut avoir un large éventail de significations liées au style du programme. Dire que le code est pythonique, c'est dire qu'il utilise bien les idiomes de Python, qu'il est naturel ou qu'il parle couramment le langage. De même, dire d'une interface ou d'un langage qu'il est pythonique, c'est dire que cela fonctionne bien avec les idiomes Python, que son utilisation s'imbrique bien avec le reste du langage.
Il aborde également le terme "unpythonic":
En revanche, une marque de code non polythonique est qu’il tente d’écrire du code C ++ (ou Lisp, Perl ou Java) en Python, c’est-à-dire qu’il fournit une transcription approximative plutôt que la traduction idiomatique de formulaires d’un autre langage. Le concept de pythonicité est étroitement lié à la philosophie minimaliste de lisibilité de Python et évite l'approche "il y a plus d'une façon de le faire". Un code illisible ou des idiomes incompréhensibles sont impythoniques.
Que signifie le terme "pythonique"? Comment puis-je apprendre à l'appliquer efficacement dans la pratique?
Réponses:
J'ai constaté que la plupart des gens ont leur propre interprétation de ce que signifie "Pythonic". De Wikipedia:
J'ai constaté que plus souvent qu'autrement, plus d'exemples "pythoniques" sont en fait dérivés de personnes essayant d'être intelligentes avec les idiomes Python et (encore une fois, plus souvent) rendant leur code pratiquement illisible (ce qui n'est pas Pythonic).
Tant que vous vous en tenez aux idiomes de Python et évitez d'essayer d'utiliser des styles C ++ (ou d'autres langages) en Python, vous êtes en train de devenir Pythonic.
Comme l’a souligné WorldEngineer, PEP8 est un bon standard à suivre (et si vous utilisez VIM, des plug-ins sont disponibles pour les filtres PEP8).
Vraiment cependant, à la fin de la journée, si votre solution fonctionne et si elle n'est pas absolument horriblement impossibles à maintenir et lente, qui s'en soucie? Plus souvent qu'autrement, votre travail consiste à exécuter une tâche et non à écrire le code le plus élégant et pythonique possible.
Une autre note latérale (juste mon opinion, n'hésitez pas à voter à cause de ça;)): J'ai aussi trouvé que la communauté Python était remplie d'une tonne d'ego (pas que la plupart des communautés ne le soient pas , c'est un peu plus répandu dans des communautés telles que C et Python). Ainsi, la combinaison de l'ego avec des interprétations mal interprétées du fait d'être "pythonique" aura tendance à produire beaucoup de négativité sans fondement. Prenez ce que vous lisez des autres avec un grain de sel. Tenez-vous-en aux normes officielles et à la documentation et tout ira bien.
la source
Pythonic consiste à coder idiomatiquement en Python. Cela signifie utiliser des structures et un formatage qui fonctionnent bien pour Python du point de vue de la programmation, mais également du point de vue de la lecture par la communauté. Cela ressemble beaucoup à la façon dont K & R a établi la norme pour le style de programmation C pendant longtemps. Ce guide montre que vous devez coder de manière idiomatique en Python. PEP 8 est référencé dans ce guide et mérite donc d'être lu.
la source
Écrire du code "Pythonic" à mon humble avis utilise simplement les fonctionnalités (V) HLL fournies par le langage. Comme exemple omniprésent,
C'est très pythonique. Je me souviens quand j'ai commencé à apprendre le C # après des mois uniquement en Python,
m'a un peu dérouté, mais il m'a fallu une minute pour revenir à mes racines C / C ++.
Une autre façon pythonique utilise lambdas.
imprimera effectivement
l
trié par ordre décroissant.Ensuite, il y a le "typage de canard" très utilisé, mais très moins compris - S'il marche et parle comme un canard, vous le traitez comme un canard. Ceci est vaguement lié aux interfaces dans d'autres langages OO.
Les méthodes de programmation fonctionnelles, telles que l'utilisation de map et de réduire, sont également considérées comme pythoniques.
J'ai vu une réponse être postée pendant que je tapais, et elle contient un bon lien. PS: Ce n'est pas que votre connaissance de Python soit limitée. Je parie que le python n'était pas votre langue maternelle et que par conséquent (comme la plupart d'entre nous, les pythonistes), vous devrez apprendre à être "idiomatiques" avec le serpent! À votre santé!
la source
map
,reduce
,lambda
et ce sont idiomatiques en soi. La compréhension de liste et l'expression de générateur sont une alternative et beaucoup les préfèrent chaque fois que cela est raisonnablement possible (en particulier, ils sont moins bruyants lorsque vous auriez besoin d'un lambda de toute façon). Ils ont certainement leur utilité, et la programmation fonctionnelle montre d’autres idiomes (décorateur par exemple).(x, y) = (7, 'fuhrer')
- pourtant, je suis presque toujours "corrigé": sans parens, c'est le meilleur moyen de l'écrire!print(sorted(l, reverse=True))
, ce qui indique également explicitement au lecteur ce qui se passe. Je trouverais également votre premier exemple discutable. Ce sont deux missions compressées en une seule; ça va, mais je n'appellerais pas ça très Pythonic. Les lecteurs doivent regarder plus longtemps ce qu'il fait que par rapport à deux assignations.Le code pythonique est:
la source
Chaque fois que j'essayais d'apprendre une nouvelle langue, je trouvais ce code lu par des personnes qui la connaissaient parfaitement, qui levait les yeux / posait des questions sur tout ce qui avait l'air bizarre, puis essayant d'imiter leur style. meilleure chose à faire. Exemples:
En Python, étant donné que nous sommes sur le sujet, j’ai trouvé les exemples de Dive Into Python extrêmement utiles pour commencer. Ils ont tendance à enseigner non seulement les bases de Python, mais également à mettre l'accent sur Python idiomatique .
Lors de l’apprentissage de D, la documentation n’étant pas excellente à l’époque, à cause de la langue utilisée, j’ai appris en lisant le code dans la bibliothèque standard, en particulier certains des chefs-d’œuvre d’ Andrei Alexandrescu .
En apprenant le C ++, j’ai hérité du code d’un très bon programmeur C ++ et j’ai beaucoup appris sur la programmation idiomatique C ++ de son insistance à faire passer les conteneurs STL par référence, etc.
Dans toutes les langues, je trouve qu'il est utile de parcourir les questions de StackOverflow sur la langue et de voir ce que les gens font généralement pour accomplir des tâches de base.
la source
Python n'est pas Java peut vous donner des conseils utiles. Je ne peux pas en dire plus sans savoir quel genre de problèmes vous rencontrez, mais c'est un conseil très concret pour les programmeurs venant d'une autre langue (en l'occurrence java), expliquant comment faire du python différemment.
la source
Quelqu'un a dit de paraphraser, pour savoir ce qu'est Pythonic, il suffit de lancer du code. Je ne suis pas d'accord avec ça. Si vous aimez écrire du code très dense, cela ne le rend pas plus pythonique.
Une façon de vous aider à définir ce qu'est Pythonic en ce qui vous concerne est de vous demander: "Pourquoi utiliserais-je le langage Python?" Qu'est-ce qui vous attire à ce sujet?
Pour moi, c’est la lisibilité et le manque de compilation et d’open source (à peu près tout). Je peux télécharger des tonnes de bibliothèques et lire leur code source avec moins de stress que d’autres licences.
Pour moi, Python est magnifique visuellement. Guido (le créateur de Python) continue également de me prouver, à travers ses réponses dans PEPS et ses discussions), que ses choix quant à la façon dont il a créé le langage sont supérieurs à mes propres idées sur la manière dont il aurait dû être créé.
Pour moi, un bon programmeur est une personne possédant des compétences décisionnelles très éclairées sur la voie à suivre lors de la programmation. Pour moi, Python aide à faire ces choix rapidement.
En simplifiant la syntaxe du code source en autorisant la saisie de type de canard au lieu du transtypage de type explicid, et l'attente selon laquelle les codeurs révisant votre code "devraient être bien codés" conduit à quelque chose que j'appelle aussi "Pythonic"
Donc, il y a deux côtés de ce qui est Pythonic. L'un est syntaxique, l'autre est la pratique de. Comment expliquer le côté profond de ce qu'est "Pythonic" ..?
Cela n’est pas très grave: alist = ['one', 'two', 'three \ n'] alist.append ((1234, 'Atuple'))
et le tuple sera ajouté à la liste sans se soucier des types d'objet. La partie Pythonic n’est pas que vous POUVEZ faire cela, mais que votre code doit ATTENDRE cela et juste travailler / s’adapter.
Tout ce qui fonctionne sur l'objet -alist- doit être écrit avec l'idée qu'un autre codeur pourrait entrer et ajouter un non-chaîne à la liste et que l'adaptation du code source par le nouveau codeur ne devrait pas être difficile. C'est l'avantage du ducktype après tout.
la source
Achetez un livre recommandé. Lis le. Cela devrait vous donner une bonne base pour utiliser la langue et un mécanisme qui devrait correspondre au style de la communauté.
la source