OpenWeek 2018

Une introduction à Python

https://openweek.github.io/presentations/presentation-python/index.html

Maxime Piraux - maxime.piraux@student.uclouvain.be

Python

  • Démarré en 1990 par Guido Van Rossum
  • Aujourd'hui à la version 3.7 (juin 2018)
  • Langage intreprété, multi-paradigme et multiplateformes
  • Selon PYPL
    Python is the most popular language, Python grew the most in the last 5 years (13.2%)

Python

  • Syntaxe élégante
  • Conception axée vers la simplicité d'utilisation, sans compromettre la maintenabilité
  • Interpréteur intégré pour tester facilement des bouts de code
  • Gestion automatique de la mémoire
  • Librairie standard très riche

Paradigmes & typage

  • Paradigme procédural
  • Paradigme orienté objet
  • Paradigme fonctionnel
  • Typage dynamique, comme JavaScript
    • String string = "Hello, world!";
    • string = "Hello, world!"
  • Typage fort, comme Java mais avec peu de conversions implicites
    • String result = "Hello, world!" + 2;
    • result = "Hello, world!" + str(2)

Une seule source d'information: la documentation officielle https://docs.python.org

Le tutoriel officiel

Types

Toute valeur est un objet

  • Pour les nombres: int et float
  • Pour les chaînes de caractères: str
    • '' et "" pour les délimiter.
  • Pour les booléens: bool
    • True et False
  • Utilisé principalement pour des conversions explicites
    • str(2) équivaut à "2" équivaut à '2'
  • None est l'équivalent de null en Java.

Variables

  • Déclarées et initialisées en une instruction.
  • Pas d'opérateur pour déclarer une variable, une première assignation dans le contexte courant compte comme une déclaration.
  • Au moins une lettre, suivie de chiffres, lettres ou le caractère _
  • La convention de nomage est le snake case, e.g. nom_de_variable
  • Les variables commençant par _ indiquent qu'elles sont privées.
  • Pas de type explicitement associé à une variable

Strings

  • word = "Python"
  • Répété avec *, concatené avec +
  • Peut être indexé:
     +---+---+---+---+---+---+
     | P | y | t | h | o | n |
     +---+---+---+---+---+---+
     0   1   2   3   4   5   6
    -6  -5  -4  -3  -2  -1
    
    • word[2] vaut 't'
  • Peut être découpé (sliced):
    >>> word[0:2]  # characters from position 0 (included) to 2 (excluded)
    'Py'
    >>> word[2:5]  # characters from position 2 (included) to 5 (excluded)
    'tho'
  • Les strings sont immutables.

Lists & tuples

  • squares = [1, 4, 9, 16, 25]
  • Elle peut être indexée et découpée.
  • Les listes sont mutables.
  • Elles peuvent contenir des objet de type différents.
  • coordinates = (4.2, 3.6)
  • Indexable, découpable
  • Immutable
  • Unpacking: x, y = coordinates

Sets & dictionary


		odd_numbers = {1, 3, 5, 7, 9}
		capitals = {'Belgium': 'Brussels', 'France': 'Paris', 'Canada': 'Ottawa'}
            
  • 2 in odd_numbers équivaut à False
  • capitals['Canada'] équivaut à 'Ottawa'
  • 'France' in capitals équivaut à True
  • Set et dict sont mutables.

Valeur de vérité

Sont considéré comme faux:

  • None
  • zéro pour tout type numérique
  • Une list, tuple, set, string ou dict vide
  • Tout objet dont la classe définit la méthode __bool__ ou __len__ si elle renvoie 0 ou False

Toute autre valeur est considérée comme vraie.

Opérateurs & comparateurs

  • Opérateurs booléens: and, or et not
  • Comparateurs: <, <=, >, >=, ==, !=, is et is not

Syntaxe

Python n'utilise pas d'accolades pour grouper des blocs d'instructions ensemble. L'indentation est sémantique.

Java

                        if (x <= y)
                            x++;
                            y--;
                        z++;
                    
Python

                        if x <= y:
                            x += 1
                            y -= 1
                        z += 1
                    

Cela évite des erreurs et apporte beaucoup plus de clarté.

Structures de contrôle


                        if True:
                            pass
                        elif False:
                            pass
                        else:
                            pass
                    

                        while i > 0:
                            pass
                    

                        for i in range(10):
                            pass
                        
                        for i in squares:
                            pass
                        
                        for key in capitals:
                            pass
                        
                        for key, value in capitals.items():
                            pass
                    

Fonctions


                def fib(n, a=0, b=1):
                    """Print a Fibonacci series up to n."""
                    while a < n:
                        print(a)
                        a, b = b, a+b
                    print()
                fib(10)  # equiv fib(n=10)
            

                def cheeseshop(kind, *arguments, **keywords):
                    print("-- Do you have any", kind, "?")
                    print("-- I'm sorry, we're all out of", kind)
                    for arg in arguments:
                        print(arg)
                    print("-" * 40)
                    for kw in keywords:
                        print(kw, ":", keywords[kw])
                
                
                cheeseshop("Limburger", "It's very runny, sir.",
                           "It's really very, VERY runny, sir.",
                           shopkeeper="Michael Palin",
                           client="John Cleese",
                           sketch="Cheese Shop Sketch")
                
                -- Do you have any Limburger ?
                -- I'm sorry, we're all out of Limburger
                It's very runny, sir.
                It's really very, VERY runny, sir.
                ----------------------------------------
                shopkeeper : Michael Palin
                client : John Cleese
                sketch : Cheese Shop Sketch
            

Classes


                class Coordinate(object):
                    def __init__(self, x, y):
                        self.x = x
                        self.y = y
                    def dist_to_origin(self):
                        return sqrt(self.x ** 2 + self.y ** 2)

                point = Coordinate(1, 2)
                point.x = 4
                print(point.dist_to_origin())
            

Modules et import

Un module est un fichier python importable depuis d'autres modules.


                    import math
                    math.sqrt(4)
                

                    from math import sqrt
                    sqrt(4)
                

                    from math import sqrt as sq
                    sq(4)
                

Un fichier __init__.py permet a Python de considérer son dossier parent comme un module.

Lorsqu'un module est importé, tout son contexte global est exécuté.

if __name__ == "__main__":
    # execute only if run as a script
    main()

Gestion des exceptions


                try:
                    raise ValueError('Oops')
                except ValueError as e:
                    print('An exception flew by!')
                    raise