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

Функционалдык программалоо паттерндери

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

Функционалдык программалоо паттерндери

Таза функциялар, өзгөрбөстүк жана functools менен itertools аркылуу курала турган конвейерлер

Негизги идея: Функционалдык программалоо (ФП) — бул өзүнчө тил эмес, стиль. Сиз программаларды таза функциялардан курасыз, алар кириштерди чыгыштарга жашыруун каптал эффектсиз чагылдырат, маалыматты өзгөрбөс катары карайсыз жана кичине функцияларды конвейерлерге курасыз. Python таза функционалдык тил эмес, бирок анда күчтүү ФП куралдары бар: биринчи класстагы функциялар, functools, itertools, камтуулар жана генераторлор. Аңдап колдонгондо алар текшерүүгө, кешке жана түшүнүүгө жеңил кодду берет — ойлонбой колдонгондо окулбай турган бир саптык коддор чыгат. Бул тема ФПни пайда келтирген жерде колдонуу тууралуу.
Аягында сиз муну жасай аласыз:
  • таза функцияга аныктама берип, шилтемелик тунуктукту түшүндүрүү,
  • өзгөрбөс структураларды тандоо (tuple, frozenset, тоңдурулган dataclass) жана жалпы өзгөрмө абалдын каталарынан алыс болуу,
  • functoolsдон керектүү куралды алуу: reduce, partial, lru_cache, singledispatch,
  • itertools менен маалымат агымын жалкоо иштетүү (chain, islice, groupby, accumulate, takewhile),
  • кичине өзгөртүүлөрдү окулган конвейерге куруу,
  • Python'до ФП окулуучулукка зыян келтирген учурду чынчылдык менен таануу.

1. Таза функциялар жана шилтемелик тунуктук

Функция эки эрежени аткарса таза болот: (1) анын кайтарган мааниси гана аргументтерине көз каранды жана (2) ал эч кандай байкала турган каптал эффект жаратпайт — тышкы абалды өзгөртпөйт, кириш-чыгышты жасабайт, сааттан же кокус сандардан окубайт. Бирдей кириштер дайыма бирдей натыйжа берет.

# ТАЗА: натыйжа гана кириштерге көз каранды, тышкы эч нерсе өзгөрбөйт
def add_tax(price: float, rate: float) -> float:
    return round(price * (1 + rate), 2)

# ТАЗА ЭМЕС: глобалды окуйт, глобалды өзгөртөт жана кириш-чыгыш жасайт
TOTAL = 0.0
def add_tax_bad(price: float) -> float:
    global TOTAL
    result = price * 1.2
    TOTAL += result          # каптал эффект: тышкы абалды өзгөртөт
    print(result)            # каптал эффект: кириш-чыгыш
    return result

Шилтемелик тунуктук дегени — таза функцияга ар кандай чакырууну анын натыйжасы менен алмаштырса болот, программа өзгөрбөйт. add_tax(100, 0.2) бардык жерде 120.0 мааниси менен алмашат. Дал ушул касиет таза функцияларды жеңил текшерилчү (фикстурасыз, моксуз), кешке коопсуз жана параллель иштетүүгө коопсуз кылат — бузула турган жалпы абал жок.

Тазалык — бул спектр. Чыныгы программа акырында кириш-чыгыш жасашы керек. Практикалык максат — таза өзөк (эсептөөлөр) менен четтеринде жука таза эмес кабык (файл окуу, чыгаруу, базага жазуу) — муну көп учурда функционалдык өзөк, императивдик кабык деп аташат.

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

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

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

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