Sobes.tech
Junior

Чӣ гуна метавон декораторро бе истифодаи аломати @ даъват кард?

sobes.tech AI

Ҷавоб аз AI

Декоратор — функсия, ки қабулкунандаи функсияи дигар ҳамчун аргумент ва баргардонандаи функсияи нав аст, ки одатан функсионалияти оригиналиро васеъ мекунад. Шумо метавонед декораторро бе рамзи @ низ фаро хонед, бо истифода аз он ки функсияи декораторро ба функсияи аслӣ равшан татбиқ кунед ва натиҷаро ба ҳамон ё ба тағйирёбандаи нав таъин кунед.

Масал: ороиш додани функсияи my_function бо ёрии декоратори my_decorator.

Истифодаи синтаксиси @:

# таъриф кардани my_decorator
def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Пеш аз даъвати функсия")
        result = func(*args, **kwargs)
        print("Пас аз даъвати функсия")
        return result
    return wrapper

@my_decorator
def my_function():
    print("Дар дохили my_function")

my_function()

Даъват бе рамзи @:

# ҳамон таъриф кардани my_decorator, ки дар боло
def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Пеш аз даъвати функсия")
        result = func(*args, **kwargs)
        print("Пас аз даъвати функсия")
        return result
    return wrapper

def my_function():
    print("Дар дохили my_function")

# татбиқи равшан кардани декоратор
my_function = my_decorator(my_function)

my_function()

Дар ҳар ду ҳолат натиҷа якхела хоҳад буд. Даъвати my_decorator(my_function) функсияи wrapper-ро бармегардонад, ки баъд онро ба тағйирёбандаи my_function таъин мекунанд, ки функсияи аслӣ ҷойгузин мешавад. Синтаксиси бо @ танҳо шакли сахт барои ин амали таъин аст.