Python cours formation

>>> import this
The Zen of Python, 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!

Voir :

PEP 8

pep257

Formations :

https://github.com/la415/epub-python

https://www.orsys.fr/formation-python-programmation-objet.html

https://www.humancoders.com/formations/python

https://www.humancoders.com/formations/python-avance

https://makina-corpus.com/formations/formation-python-initiation

https://www.nouvelleviepro.fr/formation/fiche/formation-python-paris/3085

https://www.apollo-formation.com/informatique/langages-de-developpement/python/python.html

Apprendre en ligne

http://www.jaicompris.com/python.php (les bases)

https://www.lemondeinformatique.fr/actualites/lire-2-mooc-axes-python-ia-et-datavisualisation-81195.html

https://www.welcometothejungle.com/fr/articles/meilleures-formations-pour-apprendre-a-coder

Bases :

https://scouv.lisn.upsaclay.fr/python-memento/index.fr.html

Types et variables du langage python

Listes / tuples : https://www.askpython.com/python/list/python-list-of-tuples https://www.tutorialspoint.com/convert-a-list-into-a-tuple-in-python http://olivierschmitt.fr/python-les-listes-et-tuples/

Itérateurs

Générateurs

Décorateurs

Web framework : Django, Flask, Pyramid, connexion, hug

Parsing : ElementTree (XML), Yaml, Json

Science : Numpy, Scipy, Pandas, matplotlib

Introspection : (dir, help) module inspect from inspect import getsource

Boucle : émuler un switch_case, compression liste

Mots clefs et fonctions utiles : with, any, all…

Programmation fonctionnelle : lambda, map, filter, reduce, itertools.filterfalse

Fonction Lambda https://www.codeflow.site/fr/article/python-lambda

Script système : sys os platform syslog

Fonction : Arguments par défaut, *args et **kwargs

émuler un switch_case

Complexité et preuves algorithmiques

Base de données ORM

Design Patterns https://www.toptal.com/python/python-design-patterns https://karczmarczuk.users.greyc.fr/TEACH/PyObj/Design.html

Avancé :

Solutions d'optimisation

Interfaçage avec C / C++ Swig

Typage statique avec mypy et le module typing

Les annotations de types (avec mypy, pypright, pyre ou pytypes)

Programmation par contract avec PyContracts

Linter / Formater :

Voir :

https://linuxfr.org/news/python-partie-9-formateur-de-code-analyse-statique

https://blog.stephane-robert.info/docs/developper/programmation/python/ruff/

black (The uncompromising code formatter)

pydocstyle (checking compliance with Python docstring conventions)

autopep8

flake8 (enforcing style consistency across Python projects)

ruff (linter et formateur Python) - https://blog.stephane-robert.info/docs/developper/programmation/python/ruff/

pylint (linter to detect various errors)

isort (simplify import)

bandit

Autres : tox

Jedi for Completions, Definitions, Hover, References, Signature Help, and Symbols

Rope for Completions and renaming

Pyflakes linter to detect various errors

McCabe linter for complexity checking

autopep8 for code formatting (preferred over YAPF)

pycodestyle

prospector

pre-commit

Gérer les exceptions et les erreurs :

try except finally

raise

Exception

assert

traceback

pdb

Les Libs:

Awesome-python

P.O.O.

Attributs et méthodes de classe/instance

Les méthodes spéciales (surcharges d'opérateurs, casting, constructeur, destructeur, …)

Héritage, surcharge, polymorphisme, la classe object

L’héritage simple, l’héritage multiple et le polymorphisme

L'héritage multiple et le MRO (Method Resolution Order)

Bonnes pratiques de la programmation objet avec Python

Les méta-classes et l'héritage multiple

La stdlib - Parcours de quelques modules phares :

gestion de fichiers

argparse

logging (Gestion des logs avec Python) https://code.tutsplus.com/fr/tutorials/error-handling-logging-in-python--cms-27932

configparser

os

sys

sh

subprocess (shell, bash, commands) voir https://www.redhat.com/sysadmin/python-subprocess-module ou ptyprocess

re (expressions rationnelles)

Docker / Containers :

A beginner's guide to Python containers

Aller plus loin Présentation des objets et fonctions avancés

context managers (with) https://www.geeksforgeeks.org/context-manager-in-python/ https://stackabuse.com/python-context-managers/

documenter avec sphinx

Packager une application en Python

Créer des tests unitaires dans son application : pytest, Testinfra, hypothesis, unittest, docstests

Les fonctions

def create_hello_world_message(name : str) -> str: """ Creates a personalized greeting message for the given name. Parameters: - name (str) : The name for which the message is created. Returns: - hello_world_message (str) : A personalized greeting message for the given name. Raises: - ValueError : If the given name is empty or None. """ if not name: raise ValueError hello_world_message = f'Hello World, {name}!' print(f'name : { name }') print(f'hello_world_message : { hello_world_message }') return hello_world_message

Import

import os import sys sys.path.append(os.path.dirname(os.getcwd())) import plop

Sciences - math

from sympy import symbols, Eq, solve B, G = symbols('B G') eq1 = Eq(B, 0.3 * B + 5 * G) eq2 = Eq(100 * B + 200 * G, 1000) solution = solve(eq1, eq2), (B, G)) solution[B]

Mutable / immutable

Voir aussi : deepcopy

lst=[1,2,3]; print(list(map(lambda x: [x],lst)));

Autres

import random random.randint(1,9)
export PYTHONUNBUFFERED=1

Linter

Flake8

ansible-csv-inventory.py:30:80: E501 line too long (82 > 79 characters)

Pour ignorer l'erreur

tox.ini

[flake8] extend-ignore = E501

Autres

$ ansible-test sanity --list-tests action-plugin-docs ansible-doc changelog compile empty-init ignores import line-endings no-assert no-get-exception no-illegal-filenames no-smart-quotes pep8 pslint pylint replace-urlopen runtime-metadata shebang shellcheck symlinks use-argspec-type-path use-compat-six validate-modules yamllint