171 votes

Comment mettre plusieurs déclarations sur une seule ligne?

Je n'étais pas sûr de la vertu de quel titre de réfléchir à cette question exactement, le codage de golf semble approprié si un peu imprécise.

Je sais un peu de compréhensions en python, mais ils semblent très difficiles à "lire". La façon dont je le vois, une compréhension pourrait accomplir le même que le code suivant:

for i in range(10): if i == 9: print('i equals 9')

Ce code est beaucoup plus facile à lire que de la façon dont interprétations actuellement en travaux, mais j'ai remarqué que vous ne pouvez pas avoir les deux": "dans une ligne ... ce qui m'amène trop...

ma question:

Est-il possible que je peux obtenir l'exemple suivant en UNE seule LIGNE.

try:
    if sam[0] != 'harry':
        print('hello',  sam)
except:
    pass

Quelque chose comme ce serait super:

try: if sam[0] != 'harry': print('hellp',  sam)
except:pass

Mais encore une fois je rencontre le conflit ':' J'aimerais également savoir si il existe un moyen pour exécuter essayer (ou quelque chose comme ça), sans exception, il semble tout à fait inutile que j'ai besoin de mettre à l'exception de:passer en il. ses un gaspillage de ligne.

Je vous remercie pour votre entrée ... et, ici, ont un smiley :D

176voto

ThomasH Points 6597

Malheureusement, ce que vous voulez n'est pas possible avec Python (ce qui rend Python près inutile pour la ligne de commande d'un paquebot de programmes). Même utilisation explicite de parens n'évite pas la syntaxe d'exception. Vous pouvez obtenir ayway avec une séquence de simples relevés, séparés par un point-virgule:

for i in range(10): print "foo"; print "bar"

Mais dès que vous ajoutez une construction qui présente un retrait de bloc (comme if), vous avez besoin du saut de ligne. Aussi,

for i in range(10): print "i equals 9" if i==9 else None

est juridique et peut approximative de ce que vous voulez.

Comme pour l' try ... except chose: Il serait totalement inutile sans l' except. try dit: "je veux exécuter ce code, mais il peut lever une exception". Si vous n'avez pas de soins sur l'exception, loin de l' try. Mais dès que vous le mettez, vous êtes en train de dire "je veux gérer une exception". L' pass alors dit que vous ne souhaitez pas gérer plus précisément. Mais cela signifie que votre code continuera de fonctionner, qu'il ne serait pas autrement.

68voto

ElecProg Points 11

Vous pouvez utiliser l'exec intégré, par exemple:

exec("try:\n\tif sam[0] != 'harry':\n\t\tprint('hello', sam)\nexcept:\n\tpass")

\n est une nouvelle ligne et \t est utilisé comme indentation (un onglet).

8voto

Johnsyweb Points 45395

Ne faites pas ça!

Ce que vous décrivez est pas une compréhension. C'est incompréhensible!

À partir de la PEP 8 Guide de Style pour le Code Python, qui est une lecture essentielle pour tous Python développeur:

  • Composé consolidés (plusieurs instructions sur la même ligne) sont déconseillés.

Oui:

      if foo == 'blah':
          do_blah_thing()
      do_one()
      do_two()
      do_three()

Plutôt pas:

      if foo == 'blah': do_blah_thing()
      do_one(); do_two(); do_three()

Voici un exemple de compréhension à faire la distinction:

>>> [i for i in xrange(10) if i == 9]
[9]

0voto

Achim Points 6912

Vous mélangez beaucoup de choses, ce qui rend difficile de répondre à votre question. La réponse courte est: autant Que je sache, ce que vous voulez faire, c'est juste pas possible en Python, pour une bonne raison!

Plus la réponse est que vous devez vous rendre plus à l'aise avec Python, si vous souhaitez développer en Python. Inclusions ne sont pas difficiles à lire. Vous pourriez ne pas être utilisé pour la lecture, mais vous devez vous habituer à elle si vous voulez être un développeur Python. Si il y a une langue qui convient le mieux à vos besoins, choisissez celui-là. Si vous choisissez de Python, être prêt à résoudre les problèmes dans un pythonic façon. Bien sûr, vous êtes libre de lutte contre le Python, Mais il ne sera pas amusant! ;-)

Et si vous pouviez nous dire quel est votre vrai problème est, vous pourriez même obtenir un pythonic réponse. "Obtenir quelque chose en une ligne" nous généralement pas un problème de programmation.

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