Python >> Tutoriel Python >  >> Python

Comment affecter une fonction à une variable en Python ?

Défi :Donné est la fonction f . Comment affecter la fonction à la variable g , afin que vous puissiez appeler le g() et il exécute la fonction f() ?

def f():
    print('Finxter')

# Assign function f to g
g()

Votre sortie souhaitée est la fonction f la sortie :

Finxter

Comment accomplir cela de la manière la plus Pythonique ?

Vue d'ensemble :Nous examinons deux méthodes pour relever ce défi. Vous pouvez les exécuter dans notre bloc-notes Jupyter interactif ou lire d'abord les explications suivantes.

Plongeons-nous dans les deux méthodes !

Méthode 1 :Attribuer un objet de fonction à un nouveau nom de variable

Un moyen simple d'accomplir la tâche consiste à créer un nouveau nom de variable g et à affecter l'objet fonction f à la nouvelle variable avec l'instruction f =g.

Voici l'extrait de code qui résout le problème :

# Method 1
def f():
    print('Finxter')

# Assign function f to g
g = f

# Run g
g()

La sortie est la sortie attendue de la fonction f :

Finxter

La raison en est que les deux variables pointent vers le même objet fonction en mémoire. Vous pouvez le voir dans l'outil de visualisation de mémoire suivant :

Cliquez sur suivant pour découvrir comment la mémoire change avec le code de déploiement.

Méthode 2 :Fonction Wrapper Lambda

Vous pouvez également utiliser un lambda fonction qui est un objet fonction anonyme sans nom. La fonction lambda prend zéro ou plusieurs arguments et renvoie le résultat de l'expression après les deux-points. Dans notre cas, la fonction lambda encapsule simplement la fonction d'origine f() ce qui signifie qu'il exécute en interne f() et renvoie f la valeur de retour. Le nouvel objet fonction se comporte de la même manière que f .

Voici comment cette méthode résout notre problème :

# Method 2: Lambda Wrapper Function
def f():
    print('Finxter')

# Create Lambda Wrapper Function
g = lambda : f()

# Run g
g()

Le résultat est le même :

Finxter

Testons votre compréhension des concepts introduits dans cet article.

[Python Puzzle] Testez vos compétences en matière de fonctions de renommage

Les puzzles Python vous aident à former vos compétences de compréhension rapide du code. Pouvez-vous résoudre ce casse-tête ?

def func(x):
    return x+1

f = func
print(f(2) + func(2))

Quel est le résultat de cet extrait de code ?

Explication :Un code redondant indique un style de programmation médiocre. Un excellent moyen d'éviter le code redondant est fourni par les fonctions.

Les fonctions généralisent un certain comportement et encapsulent une séquence d'instructions de programme. La fonction idéale résout un seul objectif sémantique de haut niveau. Par exemple, vous pouvez encapsuler une tâche complexe, telle qu'une recherche sur le Web, dans une fonction. De cette façon, la tâche complexe devient un simple one-liner :appeler la fonction. Les fonctions permettent à d'autres de réutiliser votre code et vous permettent de réutiliser le code d'autres personnes. Vous vous tenez sur les épaules de géants.

Vous pouvez définir une fonction avec le mot clé def , suivi d'un nom et des arguments de la fonction. L'interpréteur Python maintient une table de symboles qui stocke toutes les définitions de fonctions. De cette façon, l'interpréteur peut relier chaque occurrence du nom de la fonction à la fonctionnalité définie.

Il est possible de renommer votre fonction dans la table des symboles. C'est aussi simple que d'attribuer le nom de la fonction à une nouvelle variable (par exemple f ). Lors de l'appel de la fonction, l'interpréteur Python trouvera la fonction renommée dans la table et l'exécutera. Cela vous facilite la vie lorsque vous travaillez avec le code d'autres personnes que vous n'êtes pas autorisé à modifier.

Vous pouvez vérifier le résultat de ce puzzle sur notre application de puzzle interactive Finxter.com. Êtes-vous un codeur maître?


Testez vos compétences maintenant !

Vidéo associée