HOWTO · Python
Obtenir le nom de la fonction en Python
Il démontre comment produire un nom de fonction en Python
Sur cette page
Pour obtenir le nom d’une fonction, lisez son attribut __name__ sans appeler la fonction : function.__name__ renvoie une chaîne de caractères. Utilisez __qualname__ lorsque le contexte lexical compte, et inspectez une frame uniquement si vous avez besoin d’informations sur la fonction en cours d’exécution.
Obtenir le nom d’une fonction avec __name__
Un objet fonction expose son nom court dans __name__. Cet exemple définit deux fonctions et affiche leurs noms sans appeler l’une ou l’autre.
def greet():
return "Hello"
def farewell():
return "Goodbye"
print(greet.__name__)
print(farewell.__name__)
greet
farewell
Cet attribut fonctionne également avec les fonctions intégrées et importées. Par exemple, print.__name__ vaut print, tandis que os.system.__name__ vaut system :
import os
print(print.__name__)
print(os.system.__name__)
print
system
Ces expressions consultent les objets fonction ; elles n’appellent ni l’une ni l’autre des fonctions. Cette distinction est utile lorsque vous transmettez une fonction à une autre partie d’un programme ou que vous affichez son nom.
Obtenir un nom qualifié avec __qualname__
__qualname__ inclut le chemin lexical de la fonction dans la portée qui la contient. Cela permet de distinguer des méthodes ou des fonctions imbriquées qui partagent le même __name__ court.
class Report:
def render(self):
return "ready"
print(Report.render.__name__)
print(Report.render.__qualname__)
render
Report.render
Pour cette méthode, le nom court est render et le nom qualifié est Report.render. Aucun de ces attributs n’est un identifiant unique : deux fonctions de modules différents peuvent avoir le même nom qualifié, et affecter une fonction à une autre variable ne modifie pas le nom qui lui a été déclaré.
Utilisez __name__ pour afficher ou rechercher simplement une fonction à partir de son nom déclaré. Utilisez __qualname__ lorsque la classe englobante ou la portée imbriquée aide à préciser de quelle fonction il s’agit. Ce sont deux attributs de l’objet fonction : on référence donc la fonction sans parenthèses.
Inspecter la frame d’appel actuelle
Lorsque le code a précisément besoin du nom de la fonction en cours d’exécution, le module Python inspect peut exposer la frame actuelle et le co_name de son objet code. Cette technique d’introspection sert au débogage et aux outils associés ; ce n’est pas la méthode habituelle pour obtenir le nom d’un objet fonction.
import inspect
def current_function_name():
frame = inspect.currentframe()
if frame is None:
return None
return frame.f_code.co_name
print(current_function_name())
current_function_name
inspect.currentframe() peut renvoyer None sur les implémentations qui ne prennent pas en charge la récupération des frames. Les objets frame peuvent aussi conserver des références aux variables locales : libérez donc ces références si vous les gardez au-delà d’une brève inspection. sys._getframe(0).f_code.co_name constitue une solution de plus bas niveau lorsqu’elle est disponible. Comme son nom commence par un trait de soulignement, considérez-la comme une interface propre à l’implémentation, et non comme une API portable pour obtenir un nom.
Choisir la bonne méthode
- Utilisez
function.__name__pour obtenir le nom court d’un objet fonction connu. - Utilisez
function.__qualname__lorsque la portée imbriquée ou le contexte de classe doit figurer dans le nom affiché. - Utilisez
inspect.currentframe()ousys._getframe()uniquement si vous avez besoin de détails sur la frame en cours d’exécution, par exemple pour le débogage.
Pour afficher le nom d’une fonction dans un cas courant, __name__ est la réponse directe. Les exemples ci-dessus ont été exécutés avec succès ; leurs sorties affichent les noms renvoyés par chaque expression.