1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| #!/usr/bin/env python3
# coding: utf-8
import random
import timeit
from functools import partial
# Initialisation random
random.seed()
# Les fonctions à tester
def narvalo(l): return list({mot:None for mot in l.split(" ")})
def hominide(l):
ll=list()
for mot in l.split(' '):
if mot not in ll: ll.append(mot)
return ll
# hominide()
fct={
"narvalo" : narvalo,
"hominide" : hominide,
}
# Les données à traiter
data = '''Python est un langage portable, dynamique, extensible, gratuit, qui permet (sans l'imposer) une approche modulaire et orientée objet de la programmation. Python est développé depuis 1989 par Guido van Rossum et par de nombreux contributeurs bénévoles. Il est récupérable gratuitement sur le site https://www.python.org.
Le nom du langage provient de lémission de la BBC « Monty Pythons Flying Circus »(1) et na rien à voir avec les reptiles.
I-1. Pourquoi programmer en Python ?▲
Aucun langage de programmation n'est parfait. Il n'existe même pas un langage meilleur que d'autres ; il n'y a que des langages en adéquation ou peu conseillés pour des buts particuliers. (Herbert Mayer).
Python nest pas le meilleur langage pour quoi que ce soit. Pour travailler sur du texte, Perl est meilleur. Pour de lintelligence artificielle, Lisp est meilleur. Pour de lembarqué, C est meilleur. Pour de lasynchrone, JavaScript est meilleur.
Non. Python nest pas le meilleur, mais seulement très bon. Toutefois, il est très bon pour tout. Python est excellent pour analyser du texte, pour faire un site web (même asynchrone), de ladministration système, des interfaces graphiques, du calcul scientifique, de la 3D, des robots dindexation, etc. Pas le meilleur, mais très bon.
Et ceci est totalement suffisant. Cela veut dire que pour commencer un projet, nimporte quel projet, on peut partir tranquille avec Python. On ne sera pas bloqué plus tard par tel ou tel besoin. On pourra sen sortir agréablement avec Python.
Vous faites un site en JavaScript? Pour le sysadmin, il va falloir un autre langage
Des scripts de maintenance en Perl? Jespère que vous naurez pas besoin dune GUI
Un crawler en PHP ? Pour lanalyse des données récupérées, vous allez vous amuser
De lextraction de données en Ruby ? Pourvu quil ne faille pas traiter plusieurs To
Ce nest pas que vous ne pourrez pas ; ils sont tous « Turing complet » après tout. Mais vous allez vraiment galérer.
Aucun langage nest parfait, et Python nest pas une exception. Mais dans 99% des cas, vous pouvez avoir une solution propre et efficace en Python à la problématique que vous ne savez même pas encore que vous aurez. Et le jour où vous atteindrez la limite, alors oui, vous pourrez utiliser une autre technologie pour la contourner. Mais juste pour cette partie. La plupart du temps, ce sera une partie très réduite. Et en plus, Python pourra probablement sinterfacer nativement avec le code de lautre langage.
Il y a des tas de raisons de ne pas choisir Python bien entendu, mais probablement la meilleure raison de le choisir, cest quil y a peu de chance de se planter.
I-2. Caractéristiques principales▲
Détaillons un peu les principales caractéristiques de Python, plus précisément, du langage et de ses différentes implantations actuelles :
Python est portable, non seulement sur les différentes variantes d'Unix, mais aussi sur les OS propriétaires (MacOS, BeOS, NeXTStep, MS-DOS) et les différentes variantes de Windows ;
Python est gratuit, mais on peut l'utiliser sans restriction dans des projets commerciaux ;
Python convient aussi bien à des scripts d'une dizaine de lignes qu'à des projets complexes de plusieurs dizaines de milliers de lignes ;
la syntaxe de Python est très simple et, combinée à des types de données évolués (listes, dictionnaires, objets
), conduit à des programmes à la fois très compacts et très lisibles. À fonctionnalités égales, un programme Python (abondamment commenté et présenté selon les canons standards) est souvent de 3 à 5 fois plus petit qu'un programme C ou C++ ou même Java équivalents, ce qui entraine en général un temps de développement de 5 à 10 fois plus court et une facilité de maintenance largement accrue ;
Python gère ses ressources (mémoire, descripteurs de fichiers
) sans intervention du programmeur, par un mécanisme de comptage de références proche d'un garbage collector ;
Python est (optionnellement) multithreadé ;
Python est orienté objet. Il supporte l'héritage multiple et la surcharge des opérateurs ;
Python intègre un système d'exceptions qui permettent de simplifier considérablement la gestion des erreurs ;
Python est dynamique (l'interpréteur peut évaluer des chaînes de caractères représentant des expressions ou des instructions Python), orthogonal (un petit nombre de concepts suffit à engendrer des constructions très riches), réflexif (il supporte la métaprogrammation, par exemple la capacité pour un objet de se rajouter ou de s'enlever des attributs ou des méthodes, ou même de changer de classe en cours d'exécution) et introspectif (un grand nombre d'outils de développement, comme le débogueur ou le profiler, sont implantés en Python lui-même) ;
Python est dynamiquement typé. Tout objet manipulable par le programmeur possède un type bien défini à l'exécution, qui n'a pas besoin d'être déclaré à l'avance ;
Python est extensible : on peut facilement l'interfacer avec des bibliothèques C existantes. On peut aussi s'en servir comme d'un langage d'extension pour des systèmes logiciels complexes ;
la bibliothèque standard de Python et les paquetages externes donnent accès à une grande variété de services : chaînes de caractères et expressions régulières, services Unix standards (fichiers, pipes, signaux, sockets, threads
), accès Internet (web, news, ftp, cgi, html
), persistance et bases de données, interfaces graphiques ;
Python est un langage qui continue à évoluer, soutenu par une communauté d'utilisateurs enthousiastes et responsables, dont la plupart sont des supporters du logiciel libre. Parallèlement à l'interpréteur principal, écrit en C et maintenu par le créateur du langage, un deuxième interpréteur écrit en Java est en cours de développement.
I-3. Python 2 ou Python 3 ?▲
En 2007 Python a subi une évolution majeure de Python 2 vers Python 3. Les évolutions de cette version associées à un ménage majeur destiné à clarifier le code ont rendu toute compatibilité ascendante et descendante impossible à assurer, ce qui rend ces deux versions totalement incompatibles lune avec lautre (sauf à passer exclusivement par la partie qui est restée commune, ce qui réduit alors nettement les possibilités offertes par ces deux versions).
Il était prévu à lorigine que Python 2 soit abandonné en 2015 (soit huit ans après). Cependant, devant lénorme masse de bibliothèques et outils écrits en Python 2 devant être portés sous Python 3 ; face à la demande massive des développeurs nayant pas la possibilité matérielle de faire ce travail (venant en supplément), et dont certains considéraient encore en 2015 que Python 3 manquait encore de maturité (on a même cru un moment qu'un Python 4 arriverait avant la mort de Python 2) ; la communauté a décidé de continuer à assurer une évolution et un suivi de Python 2 qui se sont terminés définitivement au 1er janvier 2020.
La question du choix entre la version 2 ou 3 de Python ne devrait donc plus se poser. Néanmoins, il est important de savoir quil existe toujours de nombreux programmes qui utilisent Python 2. Ce tutoriel est donc majoritairement écrit pour Python 3 mais avec des exemples généralement utilisables dans les deux versions (2 et 3) et les quelques exemples spécifiques v2 ou v3 seront marqués à cet effet.
La dernière version (par rapport à ce document) de Python 2 est la 2.7.18 (version définitive pour Python 2 sortie en avril 2020) et la dernière version de Python 3 est la 3.10.0 (sortie en octobre 2021).'''
# Vérification
assert narvalo(data) == hominide(data)
print("Assertion ok")
# Le nombre de répétitions (les moyennes se feront sur cette valeur)
repeat=20
# Appel des fonctions dans un ordre aléatoire et affichage du chrono
print("taille data=%d, repeat=%d" % (len(data), repeat))
for (k, v) in random.sample(tuple(fct.items()), len(fct)):
t=timeit.Timer(partial(v, data)).repeat(repeat=repeat, number=50_000)
print("%s: min=%f, max=%f, avg=%f" % (k, min(t), max(t), sum(t)/len(t)))
# for |
Partager