В чем главное различие между ними?Я изучал Python и наткнулся на них.Декоратор - это, по сути, функция, которая оборачивает другую функцию, и вы можете делать что угодно до и после выполнения определенной функции.
def my_decorator(some_function):
def wrapper(*args, **kwargs):
print("Do something before the function is called")
some_function(*args, **kwargs)
print("Do something after the function is called")
return wrapper
@my_decorator
def addition(a, b):
result = a+b
print("Addition of {} and {} is {}".format(a,b,result))
Но после изучения Context Manager я не мог не заметить, что у него тоже есть введите и выход , где вы можете выполнять большинство подобных операций.
from contextlib import contextmanager
@contextmanager
def open_file(path, mode):
the_file = open(path, mode)
yield the_file
the_file.close()
files = []
for x in range(100000):
with open_file('foo.txt', 'w') as infile:
files.append(infile)
for f in files:
if not f.closed:
print('not closed')
Все до выхода берется как часть "входа" и все после части "выхода".
Хотя и Менеджеры контекста, и Декораторы синтаксически различны, их поведение можно рассматривать как схожее.Так в чем же разница?Каковы различные сценарии, когда следует использовать любой из них?