Outils pour utilisateurs

Outils du site


aidememo:aide_memoire

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

aidememo:aide_memoire [2018/07/31 09:18] – créée ronanaidememo:aide_memoire [2019/01/11 15:14] (Version actuelle) rguyader
Ligne 16: Ligne 16:
   * Ordre de recherche / champs des variables : look in the local symbol table, then in the local symbol tables of enclosing functions, then in the global symbol table, and finally in the table of built-in names   * Ordre de recherche / champs des variables : look in the local symbol table, then in the local symbol tables of enclosing functions, then in the global symbol table, and finally in the table of built-in names
   * Une fonction copie les arguments en variables locales, sauf les listes. Cependant, les arguments par défaut ne sont évalués qu'une seule fois (=> liste par défaut persistante). Si l'on veut éviter ce comportement, faire une RAZ :   * Une fonction copie les arguments en variables locales, sauf les listes. Cependant, les arguments par défaut ne sont évalués qu'une seule fois (=> liste par défaut persistante). Si l'on veut éviter ce comportement, faire une RAZ :
- +<code python> 
-    def f(a, L=None): +def f(a, L=None): 
-    if L is None: +  if L is None: 
-        L = [] +    L = [] 
-    L.append(a) +  L.append(a) 
-    return L +  return L 
 +</code>
 ===== Quoting : ===== ===== Quoting : =====
  
   * Double quote > simple quote   * Double quote > simple quote
   * Sur lignes multiples (docstrings) :    * Sur lignes multiples (docstrings) : 
- +<code python> 
-    """ commentaire  +""" commentaire  
-    sur  +sur  
-    plusieurs  +plusieurs  
-    lignes """ +lignes """ 
 +</code>
   * Unlike other languages, special characters such as \n have the same meaning with both single ('...') and double ("...") quotes. The only difference between the two is that within single quotes you don’t need to escape " (but you have to escape \') and vice versa.   * Unlike other languages, special characters such as \n have the same meaning with both single ('...') and double ("...") quotes. The only difference between the two is that within single quotes you don’t need to escape " (but you have to escape \') and vice versa.
  
Ligne 46: Ligne 46:
   * Fin de ligne : print(b, end=',')   * Fin de ligne : print(b, end=',')
   * Un caractère peut être utilisé pour joindre des chaines :   * Un caractère peut être utilisé pour joindre des chaines :
 +<code python>
 +def concat(*args, sep="/"):
 +  return sep.join(args)
  
-    def concat(*args, sep="/"): +concat("earth", "mars", "venus"          # 'earth/mars/venus' 
-        return sep.join(args) +concat("earth", "mars", "venus", sep="." # 'earth.mars.venus' 
- +</code>
-    concat("earth", "mars", "venus"          # 'earth/mars/venus' +
-    concat("earth", "mars", "venus", sep="." # 'earth.mars.venus' +
   * strip : virer les espaces à la fin   * strip : virer les espaces à la fin
 +<code python>
     'tea for too'.replace('too', 'two') # 'tea for two'     'tea for too'.replace('too', 'two') # 'tea for two'
 +</code>
 ===== Variables : ===== ===== Variables : =====
  
   * Les chaines ne peuvent pas être modifiées   * Les chaines ne peuvent pas être modifiées
   * L'assignement multiple est possible :    * L'assignement multiple est possible : 
- +<code python> 
-    a, b = 0, 1 +a, b = 0, 1 
-    a, b = b, a+b +a, b = b, a+b 
 +</code>
 ===== Boucles de contrôle : ===== ===== Boucles de contrôle : =====
  
 ==== while ==== ==== while ====
- +<code python> 
-    a, b = 0, 1     +a, b = 0, 1     
-    while b < 10: +while b < 10: 
-        print(b) +  print(b) 
-        a, b = b, a+b +  a, b = b, a+b
-     +
-    while True: (utiliser ensuite return True/False dans les tests)+
          
 +while True: (utiliser ensuite return True/False dans les tests)
 +</code>
 ==== if ==== ==== if ====
- +<code python> 
-    if x < 0: +if x < 0: 
-        x = 0 +  x = 0 
-        print('Negative changed to zero'+  print('Negative changed to zero'
-    elif x == 0: +elif x == 0: 
-        print('Zero'+  print('Zero'
-    elif x == 1: +elif x == 1: 
-        print('Single'+  print('Single'
-    else: +else: 
-        print('More'+  print('More'
 +</code>
 ==== for ==== ==== for ====
- +<code python> 
-    words = ['cat', 'window', 'defenestrate'+words = ['cat', 'window', 'defenestrate'
-    for w in words: +for w in words: 
-        print(w, len(w)) +  print(w, len(w)) 
-    for w in words[:]:  # Loop over a slice copy of the entire list. +for w in words[:]:  # Loop over a slice copy of the entire list. 
-        if len(w) > 6: +  if len(w) > 6: 
-            words.insert(0, w) +    words.insert(0, w) 
 +</code>
 ==== for/else ==== ==== for/else ====
- +<code ptyhon> 
-    # else clause runs when no exception occurs, and a loop’s else clause runs when no break occurs +# else clause runs when no exception occurs, and a loop’s else clause runs when no break occurs 
-    # nombres premiers de 2 à 10 +# nombres premiers de 2 à 10 
-    for n in range(2, 10): +for n in range(2, 10): 
-        for x in range(2, n): +  for x in range(2, n): 
-            if n % x == 0: +    if n % x == 0: 
-                print(n, 'equals', x, '*', n//x) +      print(n, 'equals', x, '*', n//x) 
-                break +      break 
-        else: +    else: 
-            #loop fell through without finding a factor +      #loop fell through without finding a factor 
-            print(n, 'is a prime number'+      print(n, 'is a prime number'
 +</code>
 ==== for/continue ==== ==== for/continue ====
- +<code python> 
-  # continue force to continue next for iteration +continue force to continue next for iteration 
-  for num in range(2, 10): +for num in range(2, 10): 
-    if num % 2 == 0: +  if num % 2 == 0: 
-      print("Found an even number", num) +    print("Found an even number", num) 
-      continue +    continue 
-    print("Found a number", num) +  print("Found a number", num) 
 +</code>
 ==== pass ==== ==== pass ====
  
 Ne sert à rien sauf à meubler syntaxiquement Ne sert à rien sauf à meubler syntaxiquement
- +<code python> 
-  while True: +while True: 
-      pass  # Busy-wait for keyboard interrupt (Ctrl+C) +  pass  # Busy-wait for keyboard interrupt (Ctrl+C) 
-  class MyEmptyClass: +class MyEmptyClass: 
-      pass +  pass 
-  def initlog(*args): +def initlog(*args): 
-      pass   # Remember to implement this! +  pass   # Remember to implement this! 
 +</code>
 ===== Itérateurs ===== ===== Itérateurs =====
 +<code python>
 +range
 +range(5)              # 0 through 4 (5 values)
 +range(5, 10)          # 5 through 9
 +range(0, 10, 3)       # 0, 3, 6, 9
 +range(-10, -100, -30) # -10, -40, -70
  
-  range +list(range(5)) # donne [0, 1, 2, 3, 4] 
-  range(5)              # 0 through 4 (5 values) +</code>
-  range(5, 10)          # 5 through 9 +
-  range(0, 10, 3)       # 0, 3, 6, 9 +
-  range(-10, -100, -30) # -10, -40, -70 +
- +
-  list(range(5)) # donne [0, 1, 2, 3, 4] +
 ===== Structures de données ===== ===== Structures de données =====
  
Ligne 163: Ligne 163:
   * length : len(<list>)   * length : len(<list>)
   * replace/remove/clear :    * replace/remove/clear : 
 +<code python>
     letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g'     letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g'
     letters[2:5] = ['C', 'D', 'E']     letters[2:5] = ['C', 'D', 'E']
     letters[2:5] = []     letters[2:5] = []
     letters[:] = []     letters[:] = []
 +</code>
   * nesting possible (lists of lists), making multidimansional array : x[0][1]   * nesting possible (lists of lists), making multidimansional array : x[0][1]
   * test de présence dans liste : in ; exemple : if <variable> in <list, ex : ('y', 'ye', 'yes')>   * test de présence dans liste : in ; exemple : if <variable> in <list, ex : ('y', 'ye', 'yes')>
  
 ==== Tuples ==== ==== Tuples ====
 +<code python>
   *name   *name
   unpack :   unpack :
Ligne 179: Ligne 179:
     list(range(*args))            # call with arguments unpacked from a list     list(range(*args))            # call with arguments unpacked from a list
     [3, 4, 5]     [3, 4, 5]
 +</code>
 ==== Dictionnaires ==== ==== Dictionnaires ====
- +<code python> 
-  name +name 
-  keys = sorted(name.keys()) +keys = sorted(name.keys()) 
-  for kw in keys: +for kw in keys: 
-    print(kw, ":", name[kw]) +  print(kw, ":", name[kw]) 
 +</code>
 **RQ :** si pas trié, alors l'ordre est indéfini **RQ :** si pas trié, alors l'ordre est indéfini
- +<code python> 
-  unpack : +unpack : 
-    d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"+  d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"
-    function(**d) +  function(**d) 
 +</code>
  
 ==== Fonctions ==== ==== Fonctions ====
- +<code python> 
-  def fib2(n): +def fib2(n): 
-    """Return a list containing the Fibonacci series up to n.""" +  """Return a list containing the Fibonacci series up to n.""" 
-    result = [] +  result = [] 
-    a, b = 0, 1 +  a, b = 0, 1 
-    while a < n: +  while a < n: 
-        result.append(a)    # see below +    result.append(a)    # see below 
-        a, b = b, a+b+    a, b = b, a+b
     return result     return result
-  f100 = fib2(100)    # call it +f100 = fib2(100)    # call it 
-  f100                # write the result+f100                # write the result
   # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]   # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
 +</code>
 **Rq documentation :** La ligne de commentaire doit décrire de manière succincte le but de la fonction. Commencer par une majuscule et finir par un point. Si plus de ligne, laisser une vide. **Rq documentation :** La ligne de commentaire doit décrire de manière succincte le but de la fonction. Commencer par une majuscule et finir par un point. Si plus de ligne, laisser une vide.
  
 +<code python>
   def my_function():   def my_function():
     """Do nothing, but document it.     """Do nothing, but document it.
Ligne 217: Ligne 218:
     pass     pass
   print(my_function.__doc__)   print(my_function.__doc__)
 +</code>
  
 **Fonctions avec nombre d'arguments variables :** **Fonctions avec nombre d'arguments variables :**
Ligne 231: Ligne 233:
          
 **fonctions anonymes : lambda** **fonctions anonymes : lambda**
 +
 +<code python>
   def make_incrementor(n):   def make_incrementor(n):
     return lambda x: x + n     return lambda x: x + n
Ligne 240: Ligne 244:
   pairs.sort(key=lambda pair: pair[1])   pairs.sort(key=lambda pair: pair[1])
   pairs # [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]   pairs # [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
 +</code>
  
   * lambda : facilité de visualisation, un peu batard entre les macros et les fonctions   * lambda : facilité de visualisation, un peu batard entre les macros et les fonctions
Ligne 252: Ligne 257:
 On peut réagir à plusieurs exceptions en même temps : except (RuntimeError, TypeError, NameError) : On peut réagir à plusieurs exceptions en même temps : except (RuntimeError, TypeError, NameError) :
  
 +<code python>
   try:   try:
     f = open('myfile.txt')     f = open('myfile.txt')
Ligne 267: Ligne 273:
   finally:   finally:
     print('Goodbye, world!') # clause toujours exécutée (avant de lever l'exception si présente) - fermer les IO ici :)     print('Goodbye, world!') # clause toujours exécutée (avant de lever l'exception si présente) - fermer les IO ici :)
 +</code>
  
 On peut lever soi-même des exceptions : On peut lever soi-même des exceptions :
  
 +<code python>
   raise NameError('HiThere')   raise NameError('HiThere')
 +</code>
  
 ===== Coder proprement ===== ===== Coder proprement =====
Ligne 302: Ligne 311:
   * **attention :** pour 1 et 2 éléments :    * **attention :** pour 1 et 2 éléments : 
  
 +<code python>
   empty = ()    empty = () 
   singleton = 'hello',   singleton = 'hello',
 +</code>
  
 ==== sets ==== ==== sets ====
Ligne 325: Ligne 336:
   * On peut aussi importer directmeent des fonctions et s'en servir :    * On peut aussi importer directmeent des fonctions et s'en servir : 
  
 +<code python>
   from fibo import fib    from fibo import fib 
   fib(500)   fib(500)
 +</code>
  
   * On peut aussi exécuter des modules comme des scripts :    * On peut aussi exécuter des modules comme des scripts : 
  
 +<code python>
   python fibo.py <arguments>   python fibo.py <arguments>
 +</code>
  
 Dans ce cas pour gérer les varibles, on utilise : Dans ce cas pour gérer les varibles, on utilise :
  
 +<code python>
   if __name__ == "__main__":   if __name__ == "__main__":
     import sys     import sys
     fib(int(sys.argv[1]))     fib(int(sys.argv[1]))
 +</code>
  
 **RQ :** on peut aussi exécuter un module directement en ligne de commande :  **RQ :** on peut aussi exécuter un module directement en ligne de commande : 
  
 +<code python>
   python fibo.py 50   python fibo.py 50
 +</code>
  
   * Chemin de recherche des modules :   * Chemin de recherche des modules :
Ligne 365: Ligne 384:
 **Exemple :**  **Exemple :** 
  
 +<code python>
   import sound.formats.wavread   import sound.formats.wavread
 +</code>
  
 équivalent à :  équivalent à : 
 +<code python>
   from sound.formats import wavread   from sound.formats import wavread
 +</code>
  
   * **RQ :** avec le formalisme from, on peut se passer du préfixe du package :    * **RQ :** avec le formalisme from, on peut se passer du préfixe du package : 
  
 +<code python>
   wavread.play(<file>)   wavread.play(<file>)
 +</code>
  
   * **RQ :** on peut aussi importer une fonction : from sound.formats.wavread import play   * **RQ :** on peut aussi importer une fonction : from sound.formats.wavread import play
Ligne 387: Ligne 411:
   * ''srt.format()'' : remplacement par variables dans une chaine :    * ''srt.format()'' : remplacement par variables dans une chaine : 
  
 +<code python>
   print('We are the {} who say "{}!"'.format('knights', 'Ni'))   print('We are the {} who say "{}!"'.format('knights', 'Ni'))
 +</code>
  
   * ''{1}'' : référence par position :    * ''{1}'' : référence par position : 
  
 +<code python>
   print('{1} and {0}'.format('spam', 'eggs'))   print('{1} and {0}'.format('spam', 'eggs'))
 +</code>
  
   * ''{varname}'' : référence indirecte :    * ''{varname}'' : référence indirecte : 
  
 +<code python>
   print('This {food} is {adjective}.'.format(food='spam', adjective='absolutely horrible'))   print('This {food} is {adjective}.'.format(food='spam', adjective='absolutely horrible'))
 +</code>
  
   * ''{format}'' : une conversion peut être appliquée avant formattage :    * ''{format}'' : une conversion peut être appliquée avant formattage : 
  
 +<code python>
   print('The value of PI is approximately {0:.3f}.'.format(math.pi))   print('The value of PI is approximately {0:.3f}.'.format(math.pi))
 +</code>
  
   * ''open()'' : ouvre un fichier et renvoie un objet de type fichier :    * ''open()'' : ouvre un fichier et renvoie un objet de type fichier : 
  
 +<code python>
   f = open('workfile', 'w')   f = open('workfile', 'w')
 +</code>
  
 //**attention à ouvrir les fichiers binaires avec l'option b en plus pour le mode !!**// //**attention à ouvrir les fichiers binaires avec l'option b en plus pour le mode !!**//
Ligne 410: Ligne 444:
   * ''f.readline()''   * ''f.readline()''
  
 +<code python>
   for line in f:   for line in f:
     print(line, end='')     print(line, end='')
 +</code>
  
   * ''f.readlines()'' et ''list(f)'' : lire toutes les lignes d'un coup   * ''f.readlines()'' et ''list(f)'' : lire toutes les lignes d'un coup
  
 +<code python>
   f.write() :   f.write() :
     value = ('the answer', 42)     value = ('the answer', 42)
     s = str(value)     s = str(value)
     f.write(s)     f.write(s)
 +</code>
  
   * ''tell/seek''   * ''tell/seek''
Ligne 425: Ligne 463:
 formalisme with : formalisme with :
  
 +<code python>
     with open('workfile', 'r') as f:     with open('workfile', 'r') as f:
             read_data = f.read()             read_data = f.read()
         f.closed         f.closed
     True     True
 +</code>
  
 json json
Ligne 453: Ligne 493:
 **Exemple :** attribute references : **Exemple :** attribute references :
  
 +<code python>
   class MyClass:   class MyClass:
     """A simple example class"""     """A simple example class"""
Ligne 458: Ligne 499:
     def f(self): # method     def f(self): # method
       return 'hello world'       return 'hello world'
 +</code>
  
 **Exemple :** instantiation : **Exemple :** instantiation :
  
 +<code python>
   x = MyClass()   x = MyClass()
 +</code>
  
 **init :**  **init :** 
  
 +<code python>
   def __init__(self):   def __init__(self):
 +</code>
  
   * On peut créer de nouveaux attributs dans les instances objets (les objets sont "dynamiques")   * On peut créer de nouveaux attributs dans les instances objets (les objets sont "dynamiques")
Ligne 477: Ligne 523:
   * héritage :    * héritage : 
  
 +<code python>
   class DerivedClassName(BaseClassName):   class DerivedClassName(BaseClassName):
 +</code>
  
   * héritage multiple :    * héritage multiple : 
  
 +<code python>
   class DerivedClassName(Base1, Base2, Base3):   class DerivedClassName(Base1, Base2, Base3):
 +</code>
  
 **outils :** **outils :**
  
 +<code python>
     isinstance(objet, instance)     isinstance(objet, instance)
     issubclass(sousclasse, classe)     issubclass(sousclasse, classe)
 +</code>
  
 **iterateur :** ''iter()'' et ''next()'' : **iterateur :** ''iter()'' et ''next()'' :
  
 +<code python>
   class Reverse:   class Reverse:
     """Iterator for looping over a sequence backwards."""     """Iterator for looping over a sequence backwards."""
Ligne 516: Ligne 569:
   x = MyClass()   x = MyClass()
   x.f()   x.f()
 +</code>
  
 Si variable ou fonction est précédée de  Si variable ou fonction est précédée de 
Ligne 525: Ligne 579:
 **générateur :** ''iter()'' et ''next()'' sont générés automatiquement : **générateur :** ''iter()'' et ''next()'' sont générés automatiquement :
  
 +<code python>
   def reverse(data):   def reverse(data):
     for index in range(len(data)-1, -1, -1):     for index in range(len(data)-1, -1, -1):
Ligne 549: Ligne 604:
   list(data[i] for i in range(len(data)-1, -1, -1))   list(data[i] for i in range(len(data)-1, -1, -1))
 ['f', 'l', 'o', 'g'] ['f', 'l', 'o', 'g']
 +</code>
  
  
Ligne 558: Ligne 613:
 Intéragir avec l'OS Intéragir avec l'OS
  
 +<code python>
     import os     import os
     os.getcwd()      # Return the current working directory     os.getcwd()      # Return the current working directory
Ligne 563: Ligne 619:
     dir(os) # returns a list of all module functions     dir(os) # returns a list of all module functions
     help(os) # returns an extensive manual page created from the module's docstrings     help(os) # returns an extensive manual page created from the module's docstrings
 +</code>
  
 ==== module shutils ==== ==== module shutils ====
 File and dir managment File and dir managment
  
 +<code python>
     import shutil     import shutil
     shutil.copyfile('data.db', 'archive.db')     shutil.copyfile('data.db', 'archive.db')
     shutil.move('/build/executables', 'installdir')     shutil.move('/build/executables', 'installdir')
 +</code>
  
 ==== module glob ==== ==== module glob ====
 Wilcard file listing Wilcard file listing
  
 +<code python>
     import glob     import glob
     glob.glob('*.py')     glob.glob('*.py')
     # ['primes.py', 'random.py', 'quote.py']     # ['primes.py', 'random.py', 'quote.py']
 +</code>
  
 ==== module sys ==== ==== module sys ====
 Entre autre pour les arguments du programme, les sorties d'erreur, la sortie de programme Entre autre pour les arguments du programme, les sorties d'erreur, la sortie de programme
  
 +<code python>
     import sys     import sys
     print(sys.argv)     print(sys.argv)
Ligne 586: Ligne 648:
     sys.stderr.write('Warning, log file not found starting a new one\n')     sys.stderr.write('Warning, log file not found starting a new one\n')
     sys.exit()     sys.exit()
 +</code>
  
 **RQ :** The getopt module processes sys.argv using the conventions of the Unix getopt() function. More powerful and flexible command line processing is provided by the argparse module. **RQ :** The getopt module processes sys.argv using the conventions of the Unix getopt() function. More powerful and flexible command line processing is provided by the argparse module.
Ligne 592: Ligne 655:
 Regexp Regexp
  
 +<code python>
   import re   import re
   re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')   re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
Ligne 597: Ligne 661:
   re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')   re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
   # 'cat in the hat'   # 'cat in the hat'
 +</code>
  
 ==== module math ==== ==== module math ====
 Librairies c pour virgule flotante Librairies c pour virgule flotante
  
 +<code python>
   import math   import math
   math.cos(math.pi / 4) # 0.70710678118654757   math.cos(math.pi / 4) # 0.70710678118654757
   math.log(1024, 2) # 10.0   math.log(1024, 2) # 10.0
 +</code>
  
 ==== module random ==== ==== module random ====
 Selections aléatoires Selections aléatoires
  
 +<code python>
   import random   import random
   random.choice(['apple', 'pear', 'banana']) # 'apple'   random.choice(['apple', 'pear', 'banana']) # 'apple'
Ligne 613: Ligne 681:
   random.random()    # random float : 0.17970987693706186   random.random()    # random float : 0.17970987693706186
   random.randrange(6)    # random integer chosen from range(6) : 4   random.randrange(6)    # random integer chosen from range(6) : 4
 +</code>
  
 ==== modules urllib / smtplib ==== ==== modules urllib / smtplib ====
Ligne 639: Ligne 708:
 ==== string ==== ==== string ====
 from string import Template : from string import Template :
 +
 +<code python>
   from string import Template   from string import Template
   t = Template('${village}folk send $$10 to $cause.')   t = Template('${village}folk send $$10 to $cause.')
   t.substitute(village='Nottingham', cause='the ditch fund')   t.substitute(village='Nottingham', cause='the ditch fund')
 +</code>
 +
 'Nottinghamfolk send $10 to the ditch fund.' 'Nottinghamfolk send $10 to the ditch fund.'
 Voir aussi substitute, safe_substitute, propriété delimiter Voir aussi substitute, safe_substitute, propriété delimiter
aidememo/aide_memoire.1533028683.txt.gz · Dernière modification : 2018/07/31 09:18 de ronan