Introduction to Getting Function Names in Python

Python, as a versatile and widely-used programming language, offers various ways to retrieve the name of a function. This can be particularly useful for logging purposes, debugging, or even for dynamic function invocation. In this article, we will explore five different methods to get the name of a function in Python, each with its own use cases and advantages.
Key Points
- Using the `__name__` attribute for simple function name retrieval
- Employing the `__qualname__` attribute for qualified function names
- Leveraging the `inspect` module for detailed function information
- Utilizing the `sys._getframe()` method for dynamic function name retrieval
- Applying the `functools` module for functional programming approaches
1. Using the __name__
Attribute

The most straightforward way to get the name of a function in Python is by using the __name__
attribute. This attribute is a built-in Python attribute that returns the name of the function as a string.
def my_function():
print("Hello, World!")
print(my_function.__name__) # Outputs: my_function
Advantages and Use Cases
The __name__
attribute is simple and efficient. It’s particularly useful when you need to log function names or perform basic function name-based operations.
2. Using the __qualname__
Attribute
For functions defined inside other functions (nested functions), Python provides the __qualname__
attribute. This attribute returns the qualified name of the function, including the names of any enclosing functions.
def outer_function():
def inner_function():
pass
print(inner_function.__qualname__) # Outputs: outer_function.inner_function
print(outer_function.__qualname__) # Outputs: outer_function
Advantages and Use Cases
The __qualname__
attribute is invaluable when dealing with nested functions or when the full path of a function’s name is required for identification or logging purposes.
3. Leveraging the inspect
Module
The inspect
module provides several useful functions to help get information about live objects such as modules, classes, objects, etc. For getting the name of a function, you can use inspect.getframeinfo()
or inspect.currentframe()
.
import inspect
def my_function():
frame = inspect.currentframe()
print(inspect.getframeinfo(frame).function) # Outputs: my_function
my_function()
Advantages and Use Cases
The inspect
module offers a powerful way to inspect the runtime environment, making it extremely useful for debugging and logging purposes, especially in complex applications.
4. Utilizing sys._getframe()

The sys
module’s _getframe()
function returns the current frame object. This can be used in conjunction with the f_code.co_name
attribute of the frame object to get the name of the current function.
import sys
def my_function():
print(sys._getframe().f_code.co_name) # Outputs: my_function
my_function()
Advantages and Use Cases
This method provides a direct way to access the current function’s name, which can be useful in scenarios where the function needs to know its own name, such as in recursive functions or meta-programming.
5. Applying the functools
Module
Although not directly used for getting function names, the functools
module, particularly with its wraps
decorator, helps in preserving the original function’s name and docstring when creating wrapper functions.
import functools
def my_decorator(func):
@functools.wraps(func)
def wrapper(*args, kwargs):
"""Wrapper function"""
return func(*args, kwargs)
return wrapper
@my_decorator
def my_function():
"""My function"""
pass
print(my_function.__name__) # Outputs: my_function
print(my_function.__doc__) # Outputs: My function
Advantages and Use Cases
The functools.wraps
decorator is essential for creating well-behaved decorators that preserve the metadata of the original functions, ensuring that logging, debugging, and documentation tools work as expected.
What is the simplest way to get a function's name in Python?
+The simplest way is by using the `__name__` attribute of the function object.
How do I get the qualified name of a nested function?
+You can use the `__qualname__` attribute of the function object to get its qualified name.
What module can be used for inspecting live objects and getting function information?
+The `inspect` module provides functions for inspecting live objects and can be used to get information about functions.
In conclusion, Python offers multiple methods to retrieve function names, each serving different purposes and use cases. From the straightforward __name__
attribute to the more advanced uses of the inspect
and sys
modules, and the preservation of metadata with functools
, understanding these methods can significantly enhance your ability to develop robust, debuggable, and well-documented Python applications.