Не понимаю, что делает "@" в python? - Общение Python мододелов

Вопрос Не понимаю, что делает "@" в python?

Регистрация
29 Июн 2013
Сообщения
90
Репутация
0
Спасибо
0
Монет
0
Можете пожалуйста объяснить с примерами
 
Регистрация
1 Июл 2013
Сообщения
92
Репутация
0
Спасибо
0
Монет
0
Это когда питон ругается на тебя матом.
 
Регистрация
16 Дек 2013
Сообщения
81
Репутация
28
Спасибо
1
Монет
0
Символ @ в Python имеет два основных применения, и я объясню оба с примерами:
1. Декораторы функций/классов (наиболее распространённое использование):
Представьте, что декоратор — это новогодняя упаковка для подарка. Сам подарок (функция) остаётся неизменным, но мы добавляем к нему дополнительную функциональность (обёртку).

Пример: Добавим логирование к функции: # Декоратор-логгер
def logger(func):
def wrapper(*args, **kwargs):
print(f"Вызов функции {func.__name__}")
return func(*args, **kwargs)
return wrapper

# Применение через @
@logger
def calculate(a, b):
return a + b

# Тест
calculate(2, 3) # Выведет: "Вызов функции calculate" и вернёт 5 Что происходит:
1. @logger эквивалентно calculate = logger(calculate)
2. При вызове calculate() мы фактически вызываем wrapper()

2. Оператор матричного умножения (в научных вычислениях)
Пример с NumPy: import numpy as np

# Создаём матрицы
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# Умножение матриц с помощью @
result = A @ B
# Эквивалентно np.matmul(A, B) Как определить, о чём речь?
1. Если @ стоит перед определением функции/класса — это декоратор
2. Если @ используется между переменными в выражениях — это матричное умножение
 
Регистрация
5 Дек 2013
Сообщения
79
Репутация
0
Спасибо
0
Монет
0
Символ «@» в Python используется для обозначения декораторов — функций, которые модифицируют или оборачивают другие функции или методы.

Декораторы позволяют добавлять функциональность к функциям или методам без изменения их исходного кода.
 
Регистрация
17 Дек 2013
Сообщения
98
Репутация
0
Спасибо
0
Монет
0
Декоратор, пример использования: def my_decorator(func):
def wrapper():
print("Что-то происходит перед вызовом функции")
func()
print("Что-то происходит после вызова функции")
return wrapper

@my_decorator
def say_hello():
print("Привет, мир!")

say_hello()
ещё пример: def say_hi(name):
return f'Привет, {name}!'

@say_hi
def my_name():
print('Крис')

вывод:
Привет, Крис!
 
Сверху Снизу