701 votes

Est-il possible de couper une longue ligne en plusieurs lignes en Python ?

Tout comme en C, vous pouvez diviser une longue ligne en plusieurs lignes courtes. Mais en Python Si je fais cela, il y aura une erreur d'indentation... Est-ce possible ?

0 votes

On peut aussi séparer l'appel des méthodes (obj.method()) en plusieurs lignes avec des parenthèses autour, stackoverflow.com/a/64812795/687896

779voto

Darin Dimitrov Points 528142

Desde PEP 8 - Guide de style pour le code Python :

La meilleure façon d'envelopper les longues lignes est d'utiliser la ligne implicite de Python. à l'intérieur des parenthèses, des crochets et des accolades. Si nécessaire, vous pouvez pouvez ajouter une paire de parenthèses supplémentaire autour d'une expression, mais parfois l'utilisation d'une barre oblique inversée est parfois préférable. Veillez à indenter la ligne continue de manière appropriée.

Exemple de continuation de ligne implicite :

a = some_function(
    '1' + '2' + '3' - '4')

En ce qui concerne les sauts de ligne autour d'un opérateur binaire, il est dit plus loin :

Pendant des décennies, le style recommandé était de rompre après les opérateurs binaires. Mais cela peut nuire à la lisibilité de deux façons : les opérateurs ont tendance à être dispersés sur différentes colonnes de l'écran et chaque opérateur est éloigné de son opérande et déplacé sur la ligne précédente.

Dans le code Python, il est permis de faire un saut de ligne avant ou après un opérateur binaire, tant que la convention est cohérente localement. Pour le nouveau code, le style de Knuth (sauts de ligne avant l'opérateur) est suggéré.

Exemple de continuation de ligne explicite :

a = '1'   \
    + '2' \
    + '3' \
    - '4'

41 votes

Pour le deuxième exemple, il n'aime pas les espaces (que vous ne pouvez pas voir) après le " \ ".

0 votes

@cardamom Ce problème n'est pas une particularité de python ; par exemple, si vous essayez d'écrire un script shell, par ex. for boucle pour la création de répertoires : for i in dir1\ (nouvelle ligne) dir2\ (nouvelle ligne) dir3\ (nouvelle ligne) ... mkdir $i pour que ce script soit exécuté, il ne doit pas y avoir d'espace après la barre oblique inverse.

1 votes

@cardamom En fait, il n'aime pas tout caractère (sauf les nouvelles lignes). Dommage pour les commentaires

252voto

user225312 Points 22699

Il y a plus d'une façon de le faire.

1). Une longue déclaration :

>>> def print_something():
         print 'This is a really long line,', \
               'but we can make it across multiple lines.'

2). En utilisant des parenthèses :

>>> def print_something():
        print ('Wow, this also works?',
               'I never knew!')

3). Utilisation de \ encore :

>>> x = 10
>>> if x == 10 or x > 0 or \
       x < 100:
       print 'True'

Citation : PEP8 :

La façon préférée d'emballer les longues longues lignes est d'utiliser la continuation de ligne implicite de Python à l'intérieur des parenthèses, des crochets et des accolades. Si nécessaire, vous pouvez ajouter une paire de parenthèses supplémentaire autour d'une expression, mais mais l'utilisation d'une barre oblique inversée est parfois préférable. Veillez à indenter la ligne continuée de manière appropriée. L'endroit préféré pour interrompre une ligne autour d'un opérateur binaire binaire est après l'opérateur, pas avant.

0 votes

Cette question a été soulevée lors d'une présentation sur le style de code à PyOhio et nous sommes arrivés à la conclusion que 2) était une bonne façon standard de procéder. Ce n'est pas parfait, car il n'est pas aussi facile de changer le texte, mais au moins il se lit bien.

0 votes

@user225312 pourriez-vous également utiliser ''' newline code more code'''' ou est-ce une mauvaise habitude ?

0 votes

Le second imprime un tuple en python 2.7

24voto

Abyx Points 4776

Cela fonctionne aussi en Python :

>>> 1+\
      2+\
3
6
>>> (1+
          2+
 3)
6

9voto

Michael Foukarakis Points 14892

Pour autant que je sache, c'est possible. Python possède une continuation de ligne implicite (à l'intérieur des parenthèses, des crochets et des chaînes de caractères) pour les chaînes de caractères à triple citation ( """like this""" ) et l'indentation des lignes de continuation n'est pas importante. Pour plus d'informations, vous pouvez lire cet article sur l'analyse lexicale, de python.org.

3 votes

Les chaînes de caractères ne font de la continuation implicite qu'à l'intérieur des chaînes de caractères triplement citées. C'est la distinction entre les guillemets triples et simples.

-2voto

dawsondiaz Points 134

Vous pouvez aussi faire quelque chose comme

print('Hello and Welcome!\nSecond Line \nThird Line')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X