Question Comment puis-je faire un saut de ligne (continuation de ligne)?


J'ai une longue ligne de code que je veux séparer entre plusieurs lignes. Qu'est-ce que j'utilise et quelle est la syntaxe?

Par exemple, en ajoutant un tas de chaînes,

e = 'a' + 'b' + 'c' + 'd'

et l'avoir en deux lignes comme ceci:

e = 'a' + 'b' +
    'c' + 'd'

801
2017-09-09 23:45


origine


Réponses:


Quelle est la ligne? Vous pouvez simplement avoir des arguments sur la ligne suivante sans aucun problème:

a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5, 
            blahblah6, blahblah7)

Sinon, vous pouvez faire quelque chose comme ceci:

if a == True and \
   b == False

Vérifier la guide de style pour plus d'informations.

De votre ligne d'exemple:

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

Ou:

a = ('1' + '2' + '3' +
    '4' + '5')

Notez que le guide de style indique qu'il est préférable d'utiliser la continuation implicite avec des parenthèses, mais dans ce cas précis, il est probablement mauvais d'ajouter des parenthèses autour de votre expression.


910
2017-09-09 23:52



De Guide de style pour le code Python:

La manière préférée d'envelopper les longues lignes consiste à utiliser la continuation de ligne implicite de Python entre parenthèses, entre accolades et accolades. Les longues lignes peuvent être divisées sur plusieurs lignes en enveloppant les expressions entre parenthèses. Ceux-ci devraient être utilisés de préférence à l'utilisation d'un antislash pour la continuation de la ligne.

Les antislashs peuvent toujours être appropriés à certains moments. Par exemple, long, multiple with-statements ne peut pas utiliser de continuation implicite, donc les backslashes sont acceptables:

with open('/path/to/some/file/you/want/to/read') as file_1, \
        open('/path/to/some/file/being/written', 'w') as file_2:
    file_2.write(file_1.read())

Un autre cas est avec assert déclarations.

Assurez-vous de mettre en retrait la ligne continue de manière appropriée. L'endroit préféré pour contourner un opérateur binaire est après l'opérateur, pas avant. Quelques exemples:

class Rectangle(Blob):

    def __init__(self, width, height,
                 color='black', emphasis=None, highlight=0):
        if (width == 0 and height == 0 and
                color == 'red' and emphasis == 'strong' or
                highlight > 100):
            raise ValueError("sorry, you lose")
        if width == 0 and height == 0 and (color == 'red' or
                                           emphasis is None):
            raise ValueError("I don't think so -- values are %s, %s" %
                             (width, height))
        Blob.__init__(self, width, height,
                      color, emphasis, highlight)

EDIT: PEP8 recommande maintenant la convention opposée (pour casser aux opérations binaires) utilisé par les mathématiciens et leurs éditeurs pour améliorer la lisibilité.

Le style de rupture de Donald Knuth avant un opérateur binaire aligne les opérateurs verticalement, réduisant ainsi la charge de travail de l'œil lors de la détermination des éléments ajoutés et soustraits.

De PEP8: Une ligne doit-elle se rompre avant ou après un opérateur binaire?:

Donald Knuth explique la règle traditionnelle dans sa série Ordinateurs et composition: "Bien que les formules dans un paragraphe se séparent toujours après les opérations binaires et les relations, les formules affichées sont toujours interrompues avant les opérations binaires" [3].

Suivre la tradition des mathématiques donne généralement un code plus lisible:

# Yes: easy to match operators with operands
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

En code Python, il est permis de rompre avant ou après un opérateur binaire, tant que la convention est cohérente localement. Pour le nouveau code, le style de Knuth est suggéré.

[3]: The TeXBook de Donald Knuth, pages 195 et 196


177
2017-09-10 00:06



Le danger d'utiliser une barre oblique inversée pour terminer une ligne est que si des espaces sont ajoutés après la barre oblique inverse (ce qui, bien sûr, est très difficile à voir), la barre oblique inverse ne fait plus ce que vous pensiez être.

Voir Idiomes de Python et Anti-idiomes (pour Python 2 ou Python 3) pour plus.


59
2017-09-15 06:28



Vous pouvez casser des lignes entre parenthèses et accolades. En outre, vous pouvez ajouter le caractère barre oblique inverse \ à une ligne pour le casser explicitement:

x = (tuples_first_value,
     second_value)
y = 1 + \
    2

20
2017-09-21 12:20



Mettez un \ à la fin de votre ligne ou joindre la déclaration en parens ( .. ). De IBM:

b = ((i1 < 20) and
     (i2 < 30) and
     (i3 < 40))

ou

b = (i1 < 20) and \
    (i2 < 30) and \
    (i3 < 40)

19
2017-09-09 23:48



De la bouche du cheval: Ligne explicite   joindre

Deux ou plusieurs lignes physiques peuvent être   rejoint en lignes logiques en utilisant   les barres obliques inverses (\), comme suit:   quand une ligne physique se termine dans un   barre oblique inverse qui ne fait pas partie d'une chaîne   littéral ou un commentaire, il est joint à   ce qui suit formant un seul logique   ligne, en supprimant le backslash et le   caractère de fin de ligne suivant. Pour   Exemple:

if 1900 < year < 2100 and 1 <= month <= 12 \
   and 1 <= day <= 31 and 0 <= hour < 24 \
   and 0 <= minute < 60 and 0 <= second < 60:   # Looks like a valid date
        return 1

Une ligne se terminant par un antislash ne peut pas   porter un commentaire. Un antislash ne fait pas   continuer un commentaire. Un backslash fait   ne pas continuer un jeton sauf pour la chaîne   littéraux (c'est-à-dire, des jetons autres que   les littéraux de chaîne ne peuvent pas être divisés   lignes physiques en utilisant un antislash). UNE   backslash est illégal ailleurs sur un   ligne en dehors d'une chaîne littérale.


17
2017-09-09 23:53