Мазмунга өтүү

Сабактын башталышы

Python тилиндеги декораторлор

Функциянын кодун өзгөртпөстөн, аны кошумча жүрүм-турум менен ороп алыңыз

Негизги идея: декоратор — бул башка функцияны кабыл алып, аны кошумча жүрүм-турум менен ороп, оролгон вариантын кайтарган функция. @decorator сабы — функцияны анын оролгон версиясына кайра ыйгаруунун ыңгайлуу кыскартмасы. Ушул жол менен көптөгөн функцияларга бирин да түзөтпөстөн логирлөө, убакытты өлчөө, кэштөө же жетүүнү текшерүү кошуса болот.
Аягында сиз төмөнкүлөрдү жасай аласыз:
  • функциялар эмне үчүн биринчи класстагы объекттер экенин түшүндүрүү,
  • башка функциянын үстүнөн жабылган ички орогуч функцияны жазуу,
  • декоратор түзүп, аны @ аркылуу колдонуу,
  • каалаган аргументтерди *args, **kwargs аркылуу өткөрүү,
  • functools.wraps менен баштапкы атты жана документация сабын сактоо.

1. Функциялар — биринчи класстагы объекттер

Декораторлор түшүнүктүү болушу үчүн бир нерсени эстен чыгарбаңыз: Python-до функция — бул сан же тизме сыяктуу эле кадимки объект. Аны өзгөрмөгө сактап, тизмеге салып, башка функцияга аргумент катары берип, ал тургай функциядан кайтарса болот.

def shout(text):
    return text.upper()

yell = shout           # store the function object (no parentheses!)
print(yell("hello"))   # HELLO

def run_twice(func, value):
    return func(value) + " " + func(value)

print(run_twice(shout, "hi"))   # HI HI

Байкаңыз: yell = shout кашаасыз жазылат — биз функциянын натыйжасын эмес, өзүн көчүрөбүз. Дал ушул функцияларды өткөрө алуу мүмкүнчүлүгүнө декоратор таянат.

2. Ички функциялар жана жабуулар (closures)

Функцияны башка функциянын ичинде аныктаса болот. Ички функция сырткы функциянын өзгөрмөлөрүн окуй алат жана сырткы функция бүткөндөн кийин да аларга шилтемени сактайт. Курчап турган чөйрөдөн маанилерди эстеп калган ички функцияны жабуу (closure) деп аташат.

def make_multiplier(factor):
    def multiply(n):
        return n * factor      # 'factor' comes from the outer scope
    return multiply            # return the inner function object

triple = make_multiplier(3)
print(triple(10))   # 30
print(triple(4))    # 12

make_multiplier ички multiply функциясын кайтарат, ал дагы эле factor = 3 дегенди эстейт. Декоратор дал ушундай курулат: сырткы функция ички орогучту аныктап, аны кайтарат.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө