Python >> Tutoriel Python >  >> Python

3 façons (pas si) pythoniques de définir une fonction en une seule ligne [pour les pirates]

Résumé :La manière la plus Pythonique de définir une fonction en une seule ligne est de (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 ? Cet article explore en détail 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 en 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 !

Méthode 1 :Définition d'une seule ligne

La première façon, et la plus simple, de définir une fonction sur une seule ligne consiste simplement à supprimer le saut de ligne :

def f1(x): return str(x * 3) + '!'

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

La définition de la fonction est identique à celle d'origine à une différence près :vous avez supprimé la nouvelle ligne et l'indentation de la définition. Bien que cela fonctionne pour les fonctions avec des corps de fonction sur une seule ligne, vous pouvez facilement l'étendre en utilisant le point-virgule comme séparateur :

>>> def fxx(): x=1; x=2; return x
>>> fxx()
2

Bien sûr, la lisibilité est affectée si vous faites cela, mais vous devez toujours connaître la syntaxe au cas où vous verriez un code comme celui-ci dans un projet de code pratique (vous le ferez) !

Méthode 2 :Fonction Lambda

Une fonction lambda est une fonction anonyme en Python. Il commence par le mot-clé lambda , suivi d'une liste de zéro ou plusieurs arguments séparés par des virgules, suivis des deux-points et de l'expression de retour. Par exemple, lambda x, y, z: x+y+z calculerait la somme des trois valeurs d'argument x+y+z .

Si vous avez besoin d'en savoir plus sur la fonction lambda, consultez notre guide ultime sur ce blog.

Voici la manière la plus Pythonique d'écrire une fonction en une seule ligne de code :

f2 = lambda x: str(x * 3) + '!'

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

Vous créez une fonction lambda et affectez le nouvel objet fonction à la variable f2 . Cette variable peut maintenant être utilisée comme n'importe quel autre nom de fonction défini dans une définition de fonction normale.

Méthode 3 :exec()

Maintenant, soyons aussi peu pythoniques que possible, d'accord ? Le exec() La fonction prend une chaîne comme argument. Il exécute ensuite le code défini dans l'argument de chaîne. En combinaison avec le caractère multiligne '\n' , cela vous permet d'exécuter tous les extraits de code multilignes compliqués sur une seule ligne. Les pirates utilisent souvent cette technique pour entasser des scripts malveillants dans une seule ligne de code Python apparemment inoffensive. Puissant, je sais.

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

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

La chaîne f3 contient une définition de fonction sur deux lignes de notre fonction d'origine f . Vous concaténez ensuite cette chaîne avec une nouvelle ligne pour imprimer le résultat de l'exécution de cette fonction nouvellement créée dans votre script en lui transmettant des arguments arbitraires.

Questions connexes

Est-il possible d'écrire l'instruction if-then-else sur une seule ligne de code ?

Oui, vous pouvez écrire la plupart if instructions sur une seule ligne de Python en utilisant l'une des méthodes suivantes :

  1. Écrivez l'instruction if sans branche else comme une ligne Python :if 42 in range(100): print("42") .
  2. Si vous souhaitez définir une variable, utilisez l'opérateur ternaire :x = "Alice" if "Jon" in "My name is Jonas" else "Bob" .
  3. Si vous souhaitez exécuter conditionnellement une fonction, utilisez toujours l'opérateur ternaire :print("42") if 42 in range(100) else print("21") .

En savoir plus :If-Then-Else dans One Line Python [Vidéo + Shell de code interactif]

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 !!