Question

J'ai une longue ligne de code que j'ai envie de casser entre plusieurs lignes.Que dois-je utiliser et quelle est la syntaxe?

Par exemple, l'ajout d'un bouquet de chaînes,

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

et pour l'avoir deux lignes comme ceci:

e = 'a' + 'b' +
    'c' + 'd'
Était-ce utile?

La solution

Quelle est la ligne?Vous pouvez juste 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

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

À partir de votre exemple, la ligne:

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

Ou:

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

Notez que le guide du style dit que l'utilisation de l'implicite poursuite avec des parenthèses est préféré, mais dans ce cas particulier, juste l'ajout de parenthèses autour de votre expression est probablement pas la voie à suivre.

Autres conseils

À partir de Guide de Style pour le Code Python:

Le moyen privilégié de l'habillage de longues lignes est par l'utilisation de Python est la continuation de ligne implicite à l'intérieur des parenthèses, crochets et accolades. De longues lignes peut être réparti sur plusieurs lignes en enveloppant les expressions entre parenthèses.Ceux-ci devraient être utilisés de préférence à l'aide d'une barre oblique inverse pour la continuation de ligne.

Les barres obliques inverses peuvent être adaptées à la fois.Par exemple, de longues, de plusieurs avec-instructions ne peuvent pas utiliser implicite de la poursuite, de sorte que les barres obliques inverses 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 est le cas par exemple à affirmer consolidés.

Assurez-vous de retrait de la poursuite de la ligne correctement.L'endroit préféré de pause autour d'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 désormais l' à l'opposé de la convention de (pour la rupture à des opérations binaires) utilisé par les Mathématiciens et leurs éditeurs pour améliorer la lisibilité.

Donald Knuth du style de la rupture avant un opérateur binaire aligne les opérateurs verticalement, réduisant ainsi l'œil de la charge de travail au moment de déterminer les éléments qui sont ajoutés et le soustrait.

À partir de PEP8:Si un saut de ligne avant ou après un opérateur binaire?:

Donald Knuth explique la règle traditionnelle dans ses Ordinateurs et de Composition de la série:"Bien que les formules à l'intérieur d'un paragraphe toujours à la pause après des opérations binaires et les relations, affiche des formules toujours casser avant les opérations binaires"[3].

Suivant la tradition de mathématiques en résulte 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)

Dans le code Python, il est permis de pause avant ou après un opérateur binaire, aussi longtemps que la convention est conforme à l'échelle locale.Pour le nouveau code Knuth style est suggéré.

[3]:Donald Knuth est Le TeXBook, pages 195 et 196

Le danger de l'utilisation d'un antislash à la fin d'une ligne, c'est que si l'espace est ajouté après la barre oblique inverse (ce qui, bien sûr, est très difficile à voir), la barre oblique inverse n'est plus à faire ce que vous pensiez qu'il était.

Voir Python Idiomes et Anti-expressions idiomatiques (pour Python 2 ou Python 3) pour plus d'.

Mettre un \ à la fin de votre ligne ou de joindre à la déclaration dans les parenthèses ( .. ).À partir de IBM:

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

ou

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

Vous pouvez briser les lignes entre parenthesises et les accolades.En outre, vous pouvez ajouter le caractère barre oblique inverse \ pour une ligne explicitement le briser:

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

De la bouche des chevaux: Ligne explicite rejoindre

Deux ou plusieurs lignes physiques peut être rejoint dans la logique des lignes à l'aide de caractères barre oblique inverse (\), comme suit:lorsqu'une ligne physique se termine dans une barre oblique inverse qui n'est pas une partie d'une chaîne littéral ou un commentaire, il est joint à les éléments suivants formant une seule logique ligne, la suppression de la barre oblique inverse et le suivant la fin de la ligne de caractère.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 qui se termine par une barre oblique inverse ne peut pas réaliser un commentaire.Une barre oblique inverse n'est pas continuer un commentaire.Une barre oblique inverse n' de ne pas poursuivre un jeton à l'exception de la chaîne les littéraux (c'est à dire, autre que les jetons de les littéraux de chaîne ne peut pas être divisée en physique des lignes à l'aide d'une barre oblique inverse).Un la barre oblique inverse est illégal ailleurs sur un la ligne à l'extérieur d'un littéral de chaîne.

Peut-être pas le pythonic façon, mais j'utilise généralement de la liste avec la fonction join pour l'écriture d'une longue chaîne comme des requêtes SQL.

query = " ".join([
    'SELECT * FROM "TableName"',
    'WHERE "SomeColumn1"=VALUE',
    'ORDER BY "SomeColumn2"',
    'LIMIT 5;'
])

Pris de La Hitchhiker's Guide to Python (Continuation De Ligne):

Lorsqu'une logique de ligne de code est plus long que l'on a accepté la limite, vous devez diviser sur plusieurs lignes physiques.L'interpréteur Python va rejoindre les lignes consécutives si le dernier caractère de la ligne est une barre oblique inverse.Ceci est utile dans certains cas, mais doit généralement être évitée en raison de sa fragilité:un espace blanc à la fin de la ligne, après la barre oblique inverse, va briser le code et peut avoir des résultats inattendus.

Une meilleure solution est d'utiliser des parenthèses autour de vos éléments. Gauche avec une parenthèse non fermée sur un bout-de-ligne de l'interpréteur Python va rejoindre la ligne suivante jusqu'à ce que les parenthèses sont fermées.Le même comportement est titulaire pour bouclés et des crochets.

Cependant, le plus souvent, avoir à diviser une longue ligne logique est un signe que vous essayez de faire trop de choses en même temps, ce qui peut gêner la lisibilité.

Ayant cela dit, voici un exemple en ce qui concerne plusieurs des importations (en cas de dépassement de ligne de limites, définies sur la PEP-8):

from app import (
    app, abort, make_response, redirect, render_template, request, session
)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top