Je ne savais pas sous quel titre réfléchir exactement à cette question, le codage du golf semble approprié, même s'il n'est pas spécifique.
Je connais un peu les compréhensions en python mais elles semblent très difficiles à «lire». À mon avis, une compréhension peut accomplir la même chose que le code suivant:
for i in range(10): if i == 9: print('i equals 9')
Ce code est beaucoup plus facile à lire que la façon dont les compréhensions fonctionnent actuellement mais j'ai remarqué que vous ne pouvez pas avoir deux ':' en une seule ligne ... cela m'amène aussi ...
ma question:
Est-il possible que je puisse obtenir l'exemple suivant dans UNE LIGNE.
try:
if sam[0] != 'harry':
print('hello', sam)
except:
pass
Quelque chose comme ça serait génial:
try: if sam[0] != 'harry': print('hellp', sam)
except:pass
Mais encore une fois, je rencontre le conflit ':' J'adorerais aussi savoir s'il existe un moyen de lancer try (ou quelque chose comme ça) sans sauf, il semble totalement inutile que je doive mettre sauf: passer là-dedans. c'est une ligne gaspillée.
Merci pour votre contribution ... et voici un smiley : D
\n
s et utilisez des espaces pour les retraits.Réponses:
Malheureusement, ce que vous voulez n'est pas possible avec Python (ce qui rend Python presque inutile pour les programmes à une ligne de ligne de commande). Même l'utilisation explicite de parenthèses n'évite pas l'exception de syntaxe. Vous pouvez vous en tirer avec une séquence d'instructions simples, séparées par des points-virgules:
Mais dès que vous ajoutez une construction qui introduit un bloc indenté (comme
if
), vous avez besoin du saut de ligne. Aussi,est légal et peut correspondre à ce que vous voulez.
Quant à la
try ... except
chose: ce serait totalement inutile sans leexcept
.try
dit "Je veux exécuter ce code, mais cela pourrait lever une exception". Si vous ne vous souciez pas de l'exception, laissez de côté letry
. Mais dès que vous le mettez, vous dites "Je veux gérer une exception potentielle". Lepass
dit alors que vous ne souhaitez pas le gérer spécifiquement. Mais cela signifie que votre code continuera à s'exécuter, ce qui ne serait pas le cas autrement.la source
try:
: Les règles de syntaxe Python ne vous permettront tout simplement pas de vous en tirer avec une seule clause "try" sans la clause "except". Ce que je fais, c'est encapsuler le try-except dans sa propre fonction, et l'appeler à la place. Commeif (checkint(s))...
etdef checkint(s): try: int(s)\nreturn True\nexcept: return False
.python -c "exec\"print 'A' \nfor i in 1,2,3: print i \""
Vous pouvez utiliser l'instruction exec intégrée, par exemple:
Où
\n
est une nouvelle ligne et\t
est utilisé comme retrait (une tabulation).En outre, vous devez compter les espaces que vous utilisez, afin que votre indentation corresponde exactement.
Cependant, comme toutes les autres réponses déjà dit, c'est bien sûr à utiliser uniquement lorsque vous vraiment avoir à le mettre sur une ligne.
exec
est une instruction assez dangereuse (en particulier lors de la construction d'une application web) car elle permet l'exécution de code Python arbitraire.la source
exec("try: \n if sam[0] != 'harry': print('hello', sam) \nexcept: pass")
Oui, ce message a 8 ans, mais au cas où quelqu'un viendrait également chercher une réponse: vous pouvez maintenant simplement utiliser des points-virgules. Cependant, vous ne pouvez pas utiliser les staments if / elif / else, les boucles for / while et vous ne pouvez pas définir de fonctions. L'utilisation principale de ceci serait lors de l'utilisation de modules importés où vous n'avez pas à définir de fonctions ou à utiliser des instructions if / elif / else / for / while / loops.
Voici un exemple qui prend l'artiste d'une chanson, le nom de la chanson et recherche le génie pour les paroles:
la source
Je recommande de ne pas faire ça ...
Ce que vous décrivez n'est pas une compréhension.
PEP 8 Guide de style pour le code Python , que je ne recommande, a ceci à dire sur les déclarations de composés:
Voici un exemple de compréhension pour faire la distinction:
la source
Je n'encourage pas cela, mais disons que vous êtes en ligne de commande, que vous n'avez rien d'autre que Python et que vous avez vraiment besoin d'un one-liner, vous pouvez le faire:
Ce que nous faisons ici, c'est un prétraitement
\n
avant d'évaluer le code Python.C'est super hacky! N'écrivez pas de code comme celui-ci.
la source
peut-être avec "et" ou "ou"
après un faux besoin d'écrire "ou"
après un vrai besoin d'écrire "et"
comme
résultat:
ou peut-être comme
obtenu ici en recherchant google "comment mettre plusieurs déclarations en une seule ligne python", ne répond pas directement à la question, peut-être que quelqu'un d'autre en a besoin.
la source
Pour une
python -c
solution orientée, et à condition d'utiliser le shell Bash, oui, vous pouvez avoir une syntaxe simple en une ligne comme dans cet exemple:Supposons que vous souhaitiez faire quelque chose comme ceci (très similaire à votre exemple, y compris les
except: pass
instructions):Cela ne fonctionnera PAS et produira cette erreur:
C'est parce que la concurrence entre Bash et Python Interprétation de
\n
séquences d'échappement. Pour résoudre le problème, on peut utiliser la$'string'
syntaxe Bash pour forcer l'\n
interprétation de Bash AVANT celle de Python. Pour rendre l'exemple plus difficile, j'ai ajouté uneend=..\n..
spécification Python typique dans l'appel d'impression Python: à la fin, vous pourrez obtenir les DEUX\n
interprétations de bash et de Python travaillant ensemble, chacune sur son texte de préoccupation. Pour que finalement la bonne solution soit comme ceci:Cela conduit à la sortie propre correcte sans erreur:
Remarque: cela devrait également fonctionner avec
exec
des solutions orientées, car le problème est toujours le même (concours d'interprètes Bash et Python).Note 2: on pourrait contourner le problème en remplaçant certains
\n
par certains;
mais cela ne fonctionnera à aucun moment (selon les constructions Python), alors que ma solution permet de toujours "une ligne" n'importe quel morceau de programme Python multi-lignes classique.Note 3: bien sûr, en une seule ligne, il faut toujours s'occuper des espaces et de l'indentation Python, car en fait nous ne sommes pas strictement "une ligne" ici, MAIS faire une bonne gestion mixte de
\n
la séquence d'échappement entre bash et Python . C'est ainsi que nous pouvons gérer n'importe quel morceau de programme Python multi-lignes classique. L'exemple de solution illustre également cela.la source
Vous mélangez beaucoup de choses, ce qui rend difficile la réponse à votre question. La réponse courte est: pour autant que je sache, ce que vous voulez faire n'est tout simplement pas possible en Python - pour une bonne raison!
La réponse la plus longue est que vous devriez vous familiariser avec Python si vous souhaitez développer en Python. Les compréhensions ne sont pas difficiles à lire. Vous n'êtes peut-être pas habitué à les lire, mais vous devez vous y habituer si vous voulez devenir développeur Python. S'il y a une langue qui répond mieux à vos besoins, choisissez-la. Si vous choisissez Python, soyez prêt à résoudre les problèmes de manière pythonique. Bien sûr, vous êtes libre de vous battre contre Python, mais ce ne sera pas amusant! ;-)
Et si vous vouliez nous dire quel est votre vrai problème, vous pourriez même obtenir une réponse pythonique. "Obtenir quelque chose en une seule ligne" n'est généralement pas un problème de programmation.
la source
C'est possible ;-)
Vous pouvez faire des choses très laides en python comme:
qui est fonction pour le cryptage rot13 / cesa en une ligne avec 99 caractères.
la source
Voici un exemple:
pour i dans la plage (80, 90): print (i, end = "") if (i! = 89) else print (i)
Sortie: 80 81 82 83 84 85 86 87 88 89
la source