56 votes

Comment puis-je rendre mon code Python séjour de moins de 80 caractères d'une ligne?

J'ai écrit un Python dans lequel certaines lignes dépasser 80 caractères, ce qui est un seuil j'ai besoin de rester sous. Comment puis-je adapter mon code afin de réduire les longueurs de ligne?

60voto

Devin Jeanpierre Points 23162

Mon éditeur (Kate) a été configuré pour introduire un saut de ligne sur les limites de mot à chaque fois que la longueur de la ligne atteint ou dépasse 80 caractères. Cela rend-il évident que j'ai dépassé les limites. En outre, il y a une ligne rouge marquant la 80 la position d'un caractère, de me donner un préavis de quand la ligne va flux plus. Ces permettez-moi de logique du plan des lignes qui tient sur plusieurs lignes physiques.

Comme pour la façon de s'adapter à eux, il y a plusieurs mécanismes. Vous pouvez terminer la ligne par un \ , mais c'est sujette aux erreurs.

# works
print 4 + \
    2

# doesn't work
print 4 + \ 
    2

La différence? La différence est invisible, il y a eu un caractère d'espacement après la barre oblique inverse dans le second cas. Oups!

Ce qui devrait être fait à la place? Eh bien, l'entourent, entre parenthèses.

print (4 + 
    2)

N \ nécessaires. Cela fonctionne universellement, vous ne serez jamais jamais besoin de \ . Même pour l'attribut d'accès de frontières!

print (foo
    .bar())

Pour les chaînes, vous pouvez les ajouter explicitement ou implicitement, à l'aide de C-style de rejoindre.

# all of these do exactly the same thing
print ("123"
    "456")
print ("123" + 
    "456")
print "123456"

Enfin, tout ce qui sera de toute forme de support ((), []. {}), pas seulement entre parenthèses, en particulier, peuvent avoir un saut de ligne placé n'importe où. Ainsi, par exemple, vous pouvez utiliser une liste littéral sur plusieurs lignes, très bien, tant que les éléments sont séparés par une virgule.

Tout cela et plus peut être trouvé dans la documentation officielle de Python. Aussi, une note rapide, la PEP-8 spécifie 79 caractères comme la limite, pas 80-- si vous avez de 80 caractères, vous êtes déjà sur elle.

21voto

Tor Valamo Points 14209

Si le code de plus de 80 caractères est un appel de fonction (ou définition), l'introduction de l'argument de ligne. Python reconnaître la parenthèse, et voit que comme une seule ligne.

function(arg, arg, arg, arg,
         arg, arg, arg...)

Si le code de plus de 80 caractères est une ligne de code qui n'est pas naturellement sécable, vous pouvez utiliser la barre oblique inverse \ "échapper" le retour à la ligne.

some.weird.namespace.thing.that.is.long = ','.join(strings) + \
                                          'another string'

Vous pouvez également utiliser les parenthèses à votre avantage.

some.weird.namespace.thing.that.is.long = (','.join(strings) +
                                           'another string')

Tous les types de jeu de crochets {} (dict/set), [] (liste), () (tuples) peut être décomposée en plusieurs lignes sans problèmes. Cela permet pour la belle mise en forme.

mydict = {
    'key': 'value',
    'yes': 'no'
}

19voto

EOL Points 24342

Je voudrais ajouter deux points pour les réponses précédentes:

Les chaînes peuvent être automatiquement concaténés, ce qui est très pratique:

this_is_a_long_string = ("lkjlkj lkj lkj mlkj mlkj mlkj mlkj mlkj mlkj "
                         "rest of the string: no string addition is necessary!"
                         " You can do it many times!")

Notez que c'est efficace: ce n'est pas le résultat dans la chaîne de concaténations dans l'interpréteur Python: au lieu de cela, c'est tout simplement considéré comme une seule longue chaîne littérale, de sorte qu'il est efficace.

Une petite mise en garde relative aux Devin réponse: la "parenthèse" de la syntaxe ne fait pas de travail "universellement". Par exemple, d[42] = "H22G" ne peut pas être écrit comme

(d
 [42] = "H2G2")

parce que les parenthèses peuvent être utilisées uniquement autour de "calculé" de l'expression (ce qui n'inclut pas une affectation (=) comme ci-dessus).

Autre exemple, le code suivant, qui génère une erreur de syntaxe:

with (open("..... very long file name .....")
      as input_file):

En fait, les parenthèses ne peuvent pas être mis autour des déclarations, de façon plus générale (seulement les expressions).

Dans ces cas, on peut soit utiliser le "\" la syntaxe, ou, mieux (puisque "\" est à éviter si possible), de diviser le code sur plusieurs états.

18voto

Kimvais Points 12453

Idiomatiques Python dit:

Utiliser des barres obliques inverses comme un dernier recours

Donc, si à l'aide de parenthèses () est possible, éviter les barres obliques inverses. Si vous avez un a.train.wreck.that.spans.across.a.dozen.cars.and-multiple.lines.accross.the.whole.trainyard.and.several.states() faire quelque chose comme:

lines = a.train.wreck.that.spans.across.a.dozen.cars.and-multiple.lines
lines.across.the.whole.trainyard.and.several.states()

Ou, de préférence, refactoriser le code. S'il vous plaît.

4voto

gruszczy Points 14097

Vous pouvez briser les lignes comme ceci:

if some_very_long_variable == SOME_VERY_LONG_CONST and \
   some_other_long_variable == SOME_OTHER_LONG_CONST:
  print "some very long string, that needs to be broken" \
        "into two lines"

Quand il s'agit de l'invocation de fonctions, vous n'avez même pas à l'ajouter '\', il vous suffit d'appeler comme ceci:

  foo(very_long_arg1, very_long_arg2, very_long_arg3,
      very_long_arg4, very_long_arg5)

Jetez un oeil à certains bien formaté code (open source python de projet) et d'apprendre à partir de là. Et lire la PEP 8

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