fonctions, classes et méthodes (avec des docstrings) Il faut exécuter le code, faire des tests unitaires Il y a aujourd'hui la possiblité d'utiliser des et de les véri er avec . annotations de type (https://www.python.org/dev/peps/pep-0484/) mypy (http://mypy- lang.org/)
standard, vous avez notamment : Un moteur de base de données relationnelle (module sqlite) Le support pour divers type de cher (modules csv, json,...) Un logger (module logging) Un framework de tests unitaire (module unittest) Un pro ler, un debugger...
In [19]: [i for i in range(10)] [2*i for i in range(10)] [2*i for i in range(10) if i % 3 == 0 ] Out[17]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Out[18]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] Out[19]: [0, 6, 12, 18]
in zip( ["one", "two", "tree"], ["eins", "zwei", "drei"] ) } # Remarque : les dict sont non ordonnés en Python... Ce ne sera plus le cas en P ython 3.6 ! Out[16]: {'one': 'eins', 'tree': 'drei', 'two': 'zwei'}
wrapper(*args, **kwargs): print("Appel de {0} avec {1} et {2}".format( func.__name__, str(args), str(kwargs) )) val = func(*args, **kwargs) print("Fin d'appel") return val return wrapper @logged def add(x, y): return x + y add(1, 2) Out[5]: Appel de add avec (1, 2) et {} Fin d'appel 3
def __enter__(self): print("Création du LoggedAdder") return self def add(self, x, y): return x + y def __exit__(self, exc_type, exc_value, traceback): print("Fin d'utilisation") with LoggedAdder() as adder: print(adder.add(1, 2)) Création du LoggedAdder 3 Fin d'utilisation
a = None if not a: print("None est False") a = "" b = "toto" if not a: print("a est vide") if b: print("b n'est pas vide") None est False a est vide b n'est pas vide
a = [] if not a: print("a est vide") if "bu" in ["ga", "bu", "zo"]: print("J'ai bu") if "bu" in "gabuzo": print("J'ai encore bu") a est vide J'ai bu J'ai encore bu
Ca reste de l'interprété (pas de JIT) Multithreading limité (Global Interpreter Lock) Toutefois Le niveau de performance est acceptable dans la plupart des cas Il y a des implémentations alternatives (pypy, jython, etc...) Il est possible de coder des extensions en C
by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!