What does the "at" (@) symbol do in Python?

In Python, the "at" (@) symbol is used to decorate a function. A decorator is a design pattern in Python that allows modifying the behavior of a function or class without changing its code. Here's an example of a decorator in Python:

def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

Watch a course Python - The Practical Guide

In this example, the my_decorator function is a decorator. It takes a function as an argument, defines a new function wrapper that does something before and after the original function is called, and returns the new function. The @my_decorator line above the say_hello function is the decorator syntax, which tells Python to apply the my_decorator function as a decorator to the say_hello function. When you call say_hello(), it will first run the code in the wrapper function, then call the say_hello function, and then run the code in the wrapper function again.