HOWTO · Python
Obtener el nombre de la función en Python
Demuestra cómo obtener el nombre de una función en Python
En esta página
Para obtener el nombre de una función, lee su atributo __name__ sin llamar a la función: function.__name__ devuelve una cadena. Usa __qualname__ cuando importe el contexto léxico e inspecciona un marco solo si necesitas información sobre la función que se está ejecutando.
Obtener el nombre de una función con __name__
El objeto de una función expone su nombre corto mediante __name__. Este ejemplo define dos funciones e imprime sus nombres; no llama a ninguna de ellas.
def greet():
return "Hello"
def farewell():
return "Goodbye"
print(greet.__name__)
print(farewell.__name__)
greet
farewell
El atributo también funciona con funciones integradas e importadas. Por ejemplo, print.__name__ es print, mientras que os.system.__name__ es system:
import os
print(print.__name__)
print(os.system.__name__)
print
system
Estas expresiones inspeccionan los objetos de función; no llaman a ninguna de las funciones. Esta distinción resulta útil cuando pasas una función a otra parte del programa o muestras su identidad.
Obtener un nombre cualificado con __qualname__
__qualname__ incluye la ruta léxica de la función dentro del ámbito que la contiene. Esto permite distinguir métodos o funciones anidadas que comparten el mismo __name__ corto.
class Report:
def render(self):
return "ready"
print(Report.render.__name__)
print(Report.render.__qualname__)
render
Report.render
En este método, el nombre corto es render y el nombre cualificado es Report.render. Ninguno de los dos atributos es un identificador único: dos funciones de módulos distintos pueden tener el mismo nombre cualificado, y asignar una función a otra variable no cambia el nombre con el que se declaró.
Usa __name__ para mostrar o buscar de forma concisa una función por su nombre declarado. Usa __qualname__ cuando la clase contenedora o el ámbito anidado ayude a aclarar a qué función te refieres. Ambos son atributos del objeto de función, por lo que se hace referencia a la función sin paréntesis.
Inspeccionar el marco de llamada actual
Cuando el código necesita específicamente el nombre de la función que se está ejecutando, el módulo inspect de Python puede exponer el marco actual y co_name, el nombre del objeto de código de ese marco. Esta técnica de introspección sirve para depuración y herramientas relacionadas; no es la forma habitual de obtener el nombre de un objeto de función.
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() puede devolver None en implementaciones que no admiten la obtención de marcos. Los objetos de marco también pueden conservar referencias a variables locales, así que libera esas referencias si las mantienes más allá de una inspección breve. sys._getframe(0).f_code.co_name es una alternativa de nivel más bajo cuando está disponible; como su nombre comienza con un guion bajo, trátala como una interfaz específica de la implementación y no como una API portátil para obtener nombres.
Elegir el enfoque adecuado
- Usa
function.__name__para obtener el nombre corto de un objeto de función conocido. - Usa
function.__qualname__cuando quieras incluir el contexto de una clase o de un ámbito anidado en el nombre mostrado. - Usa
inspect.currentframe()osys._getframe()solo cuando necesites detalles del marco que se está ejecutando, por ejemplo, durante la depuración.
Para mostrar normalmente el nombre de una función, __name__ es la respuesta directa. Los ejemplos anteriores se ejecutaron correctamente y las salidas mostradas indican los nombres que devuelve cada expresión.