Je traversais la question du golf du code ici sur la pile débordement et a vu de nombreuses solutions Perl One Liner. P>
Ma question est la suivante: est quelque chose comme ça possible dans Python? P>
8 Réponses :
python -c 'imprimer ("oui.")' code> p>
Il est possible d'écrire des doublures en python, mais c'est gênant (Python encourage un code bien en retrait qui est quelque peu en attente avec le concept "one-liner"). C'est un peu plus facile dans Python 3 car Voici comment vous pouvez écrire un impression () code> est une fonction et non une déclaration. Voici un:
grep code> comme fonction similaire (cet exemple imprime les lignes de l'entrée contenant "FOO"): P>
python -c "for s in __import__('fileinput').input(): __import__('sys').stdout.write(s) if 'foo' in s else None"
Voici mon astuce pour exécuter plusieurs déclarations: p>
[stmt1, stmt2, expr1] [2] code>
si code> nécessite une évaluation paresseuse:
[Lambda (): STMT1; lambda (): stmt2] [pas boolexpr] () code> p>
dans la coquille de Bourne, vous pouvez utiliser quelque chose appelé Heredoc em> pour contourner la dépendance de Python sur les trindages:
non tu ne peux pas. Vous êtes indenté imprimé code>. Essayez-le sans l'indenter et vous obtenez un
indentatationError code> comme vous êtes censé.
Je l'ai trompée. Cela vous donne la possibilité de prélever du code, sans avoir à créer un fichier, ouvrir une éditeur, etc.
Il n'y a pas vraiment une telle chose que "se déplacer" la "dépendance sur les trindages" pour Python car elle empêcherait d'écrire la plupart des programmes non vaccinaux. Ce que la plupart des lecteurs sont suivants, c'est comment indiquer l'indent / dédouge d'une manière à une doublure.
Vous voulez probablement dire «à satisfaire i> la dépendance de Python sur les tirettes».
Je finis par vouloir le faire assez souvent lorsque vous faites des trucs de la coquille. Il ne finit pas d'être plus compact et, dans de nombreux cas, il est plus facile de simplement écrire une commande de shell multi-lignes que d'écrire tout comme une Lambda. Vous ne pouvez utiliser aucune déclaration de Python qui se termine par un côlon. Donc, vous finissez par avoir à
Écrivez n'importe quel écrire des lambdas au lieu de définitions de fonction. Ceci est souvent fonctionnel et a l'effet secondaire utile de vous obliger à écrire des fonctions très dirigées qui ne font vraiment qu'une chose. Cependant, ce n'est pas particulièrement pratique et ne fonctionne rien pour rien qui désigne une valeur (par exemple ne pas déranger les choses correctement avec les gestionnaires contextuels p> li>
ne pas faire une manipulation d'exception. p> li>
Utilisez un dictionnaire de Lambdas au lieu de tout Utilisez Donc, pour certaines choses, cela fonctionne, mais il s'agit généralement d'un gros problème, car vous finissez par avoir à utiliser un style fonctionnel que Python ne supporte pas vraiment. La plupart du temps, je viens d'écrire des commandes de shell multiline tels que p> code> ' code> est un Une chose agaçante à propos de la rédaction de commandes multilignes dans Bash est que Home kbd> et fin kbd> aller au début de la commande plutôt que le début de la ligne. Il peut y avoir une meilleure façon de le faire, mais je ne fais que numériser simplement en attendant Ctrl kbd> et les touches fléchées gauche / droite. Certains Si vous souhaitez insérer une pause de ligne lors de la modification d'une commande multiligne, vous pouvez faire Ceci avec ^ v- ^ j. Cela mettra une pause à la ligne de telle manière que vous pouvez toujours numériser vers les lignes précédentes, plutôt que d'utiliser la configuration P> pour code>-trike code comme une compréhension de Genexp ou de liste. Je fais de toute façon cela pour la plupart des choses, mais c'est ennuyeux d'avoir à
Importer Sys CODE> et de tout pousser à
SYS.STDOUT.WRITELINES CODE> Dans les cas où vous pourriez sinon P>
dict.update code>) puis renvoie un élément. P> li>
si code> /
ele code> sections. p> li>
type (nom, bases, dict) code> pour déclarer toutes les classes. C'est assez amusant mais ne fonctionne que si vous déclarez que vous déclarez une classe dont les méthodes peuvent toutes être exprimées en Lambdas. P> Li>
ul>
bash code> citant la syntaxe, un Alternative à son
'...' ' code> et
"..." code> citant des constructions. C'est utile car cela fonctionne comme
'...' code> mais vous permet d'échapper contenus
' code> caractères avec
\' code>. Vous pouvez également incorporer de nouvelles lignes, de sorte que le code ci-dessus pourrait également être écrit comme
Python -c $ 'importer quelque_module \ nfor v dans quelque_module.whatever (): \ n Imprimer "Quelque chose: \' {0} \ '". format (v) ' code>. Cependant, c'est quelque chose d'un goût acquis. P>
emacs code> pourraient probablement me mettre directement ici, car c'est là que viennent les clés normales de Bash. P>
$ first line of the command
> second line
> third line
Oui, en fait, il est très courant. J'utilise une doublure lorsque j'ai besoin d'écrire un code rapide. Cela dépend juste de ce que vous voulez faire. Voici une petite ligne que je viens d'utiliser ce soir. C'est la création d'un bouton Tkinter en une seule ligne.
a = Button(root, text="Button", command=com1).pack()
Un vraiment beau python one-liner (comme dans "assez utile"): Web WebServer de base instantané dans le répertoire actuel. (Juste introduit à cela aujourd'hui; très pratique.) P> p>
exec("if 6 * 9 == int('42', 13):\n\tprint('Yes!')") With this approach, every Python program can be written as a one-liner :)
Oui??? Ce pourrait être une bonne idée de préciser ce que vous voulez faire ...
appartient à programmeurs.stackexchange.com
Il y a beaucoup de doublures Python One avec la balise de golf Cods. Pas autant que Perl, mais je suis surpris que vous ne voyiez pas aucun i> d'entre eux
Oui, et il est bien mis en œuvre pour transformer n'importe quel code Python sur un one-liner ici - Github.com/csvoss/ OnLinerizer boom!