Функцияларды тереңирээк: *args, **kwargs жана демейки маанилер
Функция сигнатураларын ийкемдүү, коопсуз жана чакырууга ыңгайлуу кылып долбоорлоңуз
*args жана **kwargs, — ошондо бир функция көп чакыруу ыкмаларын кабыл алат жана морт болбойт. Туура колдонсо ашыкча кодду жоёт; кайдыгер колдонсо жашыруун каталарды жашырат.
- аргументтерди орду боюнча жана аталышы боюнча берип, кайсынысы түшүнүктүү экенин билүү;
- параметрлерге демейки маанилерди берип, алар качан колдонуларын түшүнүү;
*argsаркылуу каалаган сандагы кошумча позициялык аргументтерди чогултуу (кортеж);**kwargsаркылуу каалаган сандагы кошумча аталыштуу аргументтерди чогултуу (сөздүк);- параметрлерди туура иреттеп, аталышы гана параметрлерди жарыялоо;
- ырааттуулуктарды жана сөздүктөрдү чакырууга
*жана**менен ачуу; - атактуу өзгөрүлмө демейки маани тузагынан качуу.
1. Позициялык жана аталыштуу аргументтер
Сиз функцияларды мурунтан чакырасыз. Ар бир аргументти берүүнүн эки жолу бар. Позициялык аргумент параметрге чакыруудагы орду боюнча дал келет. Аталыштуу аргумент аталышы боюнча дал келет жана ат=маани түрүндө жазылат.
def book_room(guest, nights, breakfast):
print(guest, "-", nights, "nights, breakfast:", breakfast)
# Баары позициялык: тартип эмне кайда барарын чечет
book_room("Mara", 3, True)
# Баары аталыштуу: тартип мааниге ээ эмес, аталыштар маанилуу
book_room(nights=3, guest="Mara", breakfast=True)
# Аралаш: адегенде позициялык, анан аталыштуу
book_room("Mara", breakfast=True, nights=3)
Натыйжа:
Mara - 3 nights, breakfast: True
Mara - 3 nights, breakfast: True
Mara - 3 nights, breakfast: True
Аталыштуу аргументтер чакырууну өзүн-өзү документтештирүүчү кылат: book_room("Mara", 3, True) окурманды True эмнени билдирерин эстөөгө мажбурлайт, ал эми breakfast=True аны ачык айтат. Бир катуу эреже: аталыштуу аргументти колдонгондон кийин, андан кийинки бардык аргументтер да аталыштуу болушу керек. Позициялык аргумент эч качан аталыштуудан кийин боло албайт.
book_room(guest="Mara", 3, True) SyntaxError: positional argument follows keyword argument катасын чыгарат.