Formatage du code

2.7 Formatage du code

Objectifs d'apprentissage

À la fin de cette section, vous devriez être capable de :

  • Identifier l'espacement approprié pour les expressions et les instructions.
  • Écrire des instructions multilignes en utilisant la jointure implicite de lignes.

Espacement recommandé

La plupart des espaces dans le code Python sont ignorés lors de l'exécution des programmes ; cependant, les espaces en début de ligne sont très importants. Les deux programmes suivants sont équivalents :

  • Bon espacement : name = input("Enter someone's name: ") place = input("Enter a famous place: ") print(name, "should visit", place + "!")
  • Mauvais espacement :  name=input ("Enter someone's name: " ) place =input("Enter a famous place: ") print( name,"should visit" , place+ "!")

On pourrait faire valoir que les espaces manquants ou superflus n'ont pas d'importance. Après tout, les deux programmes ci-dessus s'exécutent exactement de la même manière. Cependant, la version avec un « mauvais espacement » est plus difficile à lire. Un code tel que name=input et place+ peut prêter à confusion.

Les bons programmeurs écrivent du code aussi facile à lire que possible. De cette façon, les autres programmeurs sont plus susceptibles de comprendre le code. Pour encourager la cohérence, la communauté Python dispose d'un ensemble de recommandations concernant l'emplacement des espaces et des lignes vides, le nommage des variables, la façon de scinder les longues lignes et d'autres sujets importants.

Guide de style Python

PEP 8 est le guide de style officiel de Python. PEP signifie Python Enhancement Proposal. Les membres de la communauté Python rédigent des PEP pour documenter les meilleures pratiques et proposer de nouvelles fonctionnalités. Le tableau ci-dessous est basé sur les recommandations de la PEP 8 sous la rubrique Whitespace in Expressions and Statements.

Recommandation Exemple Erreurs courantes
Parenthèses : aucun espace avant ou après.

print("Go team!")

print ("Go team!")
print( "Go team!" )

Virgules : aucun espace avant, un espace après.

print("Hello", name)

print("Hello" , name)
print("Hello",name)

Affectation : un espace avant et après le =.

name = input("Your name? ")

name=input("Your name? ")
name= input("Your name? ")
name =input("Your name? ")

Concaténation : un espace avant et après le +.

print("Hi", name + "!")

print("Hi", name+"!")
print("Hi", name+ "!")
print("Hi", name +"!")

Arithmétique : utiliser des espaces pour indiquer une priorité plus basse.

x**2 + 5*x - 8

x ** 2 + 5 * x - 8
x ** 2+5 * x-8
x**2+5*x-8

Tableau 2.7 Recommandations pour les espaces.

Concepts en pratique

Espacement recommandé

1.
Quelle instruction est correctement formatée ?
  1. name = input("What is your name? ")
  2. name = input ("What is your name? ")
  3. name = input( "What is your name? " )
2.
Quelle instruction est correctement formatée ?
  1. name=name+"!"
  2. name = name+"!"
  3. name = name + "!"
3.
Quelle instruction est correctement formatée ?
  1. print("Hello",name)
  2. print("Hello", name)
  3. print("Hello " , name)
4.
Quelle expression est correctement formatée ?
  1. b**2 - 4*a*c
  2. b ** 2 - 4 * a * c
  3. b**2 - 4*a * c

Concaténation automatique

Les longues chaînes de caractères rendent les programmes Python difficiles à lire. Ex. : ce programme affiche la première phrase de la Déclaration d'indépendance des États-Unis :

print("The unanimous Declaration of the thirteen united States of America, When in the Course of human events, it becomes necessary for one people to dissolve the political bands which have connected them with another, and to assume among the powers of the earth, the separate and equal station to which the Laws of Nature and of Nature's God entitle them, a decent respect to the opinions of mankind requires that they should declare the causes which impel them to the separation.")

La PEP 8 recommande que chaque ligne de code comporte moins de 80 caractères. Ainsi, les programmeurs n'ont pas besoin de faire défiler horizontalement pour lire le code. Le programme ci-dessus peut être réécrit en divisant la chaîne d'origine :

     print("The unanimous Declaration of the thirteen united States of "
           "America, When in the Course of human events, it becomes "
           "necessary for one people to dissolve the political bands "
           "which have connected them with another, and to assume among "
           "the powers of the earth, the separate and equal station to "
           "which the Laws of Nature and of Nature's God entitle them, a "
           "decent respect to the opinions of mankind requires that they "
           "should declare the causes which impel them to the separation.")

Pour des raisons pratiques, Python concatène automatiquement plusieurs chaînes de caractères. L'opérateur + n'est pas nécessaire dans cette situation.

Faites le point

Concaténation de chaînes

Concepts en pratique

Concaténation de littéraux de chaînes

5.
Quelle ligne affiche le mot "grandmother" ?
  1. print(grandmother)
  2. print("grand" "mother")
  3. print("grand", "mother")
6.
Quelle chaîne est équivalente à "Today is" "a holiday" ?
  1. 'Today isa holiday'
  2. 'Today is a holiday'
  3. 'Today is" "a holiday'
7.
Si name vaut "Ada", qu'affiche print("Hello," name) ?
  1. Hello,Ada
  2. Hello, Ada
  3. SyntaxError

Instructions multilignes

La plupart des instructions d'un programme Python ne nécessitent qu'une seule ligne de code. Mais occasionnellement, des instructions plus longues doivent s'étendre sur plusieurs lignes. Python propose deux manières d'écrire des instructions multilignes :

  • La jointure explicite de lignes, à l'aide de caractères \ :

    decl = "The unanimous Declaration of the thirteen united States of " \         "America, When in the Course of human events, it becomes " \         "necessary for one people to dissolve the political bands..."
  • La jointure implicite de lignes, à l'aide de parenthèses :

    decl = ("The unanimous Declaration of the thirteen united States of "         "America, When in the Course of human events, it becomes "         "necessary for one people to dissolve the political bands...")

La jointure implicite de lignes est plus courante, car de nombreuses instructions et expressions utilisent déjà des parenthèses. La PEP 8 recommande d'éviter autant que possible l'utilisation de la jointure explicite de lignes.

Concepts en pratique

Instructions multilignes

8.
Quel caractère est utilisé pour la jointure explicite de lignes ?
  1. /
  2. \
  3. |
9.
Quelle est la meilleure façon d'afficher une très longue chaîne de caractères ?
  1. Diviser la chaîne en plusieurs chaînes plus petites.
    print("..." # first part of string
    "..." # next part of string
    "...")
  2. Afficher la chaîne en utilisant plusieurs instructions print.
    print("...") # first part of string
    print("...") # next part of string
    print("...")
  3. Affecter la chaîne à une variable et afficher la variable.
    text = "..." # the entire string
    print(text)
    
10.
Quel exemple se compose de deux instructions ?
  1. print("Happy "
    "New Year")
  2. saying = ("Happy "
    "New Year")
  3. saying= "Happy "
    "New Year"

À vous d'essayer

Bien espacé

Le code suivant fonctionne correctement mais est mal formaté. En particulier, le code ne comporte pas les espaces recommandés par la PEP 8. De plus, deux des lignes comportent environ 90 caractères. Reformatez le code pour suivre les recommandations de cette section. Veillez à ne pas modifier le comportement du code lui-même.

À vous d'essayer

Cinq citations

Écrivez un programme qui affiche les cinq citations suivantes (source : BrainyQuote) de Guido van Rossum, le créateur de Python. Votre programme doit comporter exactement cinq instructions print, une pour chaque citation :

    1. "If you're talking about Java in particular, Python is about the best fit you can get amongst all the other languages. Yet the funny thing is, from a language point of view, JavaScript has a lot in common with Python, but it is sort of a restricted subset."
    2. "The second stream of material that is going to come out of this project is a programming environment and a set of programming tools where we really want to focus again on the needs of the newbie. This environment is going to have to be extremely user-friendly."
    3. "I have this hope that there is a better way. Higher-level tools that actually let you see the structure of the software more clearly will be of tremendous value."
    4. "Now, it's my belief that Python is a lot easier than to teach to students programming and teach them C or C++ or Java at the same time because all the details of the languages are so much harder. Other scripting languages really don't work very well there either."
    5. "I would guess that the decision to create a small special purpose language or use an existing general purpose language is one of the toughest decisions that anyone facing the need for a new language must make."

Remarquez que toutes ces lignes comportent plus de 80 caractères et que certaines contiennent des guillemets simples (apostrophes). Formatez le code en utilisant des instructions multilignes et des séquences d'échappement si nécessaire.