What are *args and **kwargs?
Ko'pincha sizning funksiyalaringiz faqat bir nechta argumentlar, kalit so'z argumentlari yoki ikkalasini ham qabul qilishini xohlaysiz.
*args va **kwargs Nima?
Ko'pincha sizning funksiyalaringiz faqat bir nechta argumentlar, kalit so'z argumentlari yoki ikkalasini ham qabul qilishini xohlaysiz. Siz ko'p argumentlardan foydalanishni xohlamaysiz, chunki bu funksiyangizni keyinchalik o'zgartirishni qiyinlashtirishi mumkin.
Biroq, Python har qanday sonli argumentlar yoki kalit so'z argumentlari tushunchasini qo'llab-quvvatlaydi. Siz ushbu maxsus sintaksisni funksiyalaringizda ishlatishingiz mumkin:
*args
- Istalgan sonli argumentlar**kwargs
- Istalgan sonli kalit so'z argumentlari
Diqqat qilishingiz kerak bo'lgan qism *
va **
hisoblanadi. Arg yoki kwarg nomi har qanday bo'lishi mumkin, lekin odatda ularni args
va kwargs
deb nomlash odatiy hisoblanadi. Boshqa so'z bilan aytganda, ko'plab Python dasturchilari ularni *args
yoki **kwargs
deb atashadi. Buni qilishga majbur emassiz, lekin kodingizni tanish va tushunarli qilish uchun shunday qilish yaxshidir.
Keling, misolga qaraylik:
Bu yerda siz any_args()
funksiyasini yaratdingiz, u nolga teng bo'lgan istalgan sonli argumentlarni qabul qiladi va ularni chop etadi.
Siz haqiqatan ham bitta majburiy argument va istalgan sonli qo'shimcha argumentlarga ega bo'lgan funktsiyani yaratishingiz mumkin:
Bu misolda, funksiyaning birinchi argumenti majburiydir. Agar siz one_required_arg()
funksiyasini hech qanday argumentlarsiz chaqirsangiz, xato olasiz.
Endi kalit so'z argumentlarini qo'shishga harakat qilaylik:
Oops! Siz funktsiyani kalit so'z argumentlarini qabul qilish uchun yaratdingiz, lekin oddiy argumentlarni kiritdingiz. Bu TypeError
xatosini keltirib chiqardi.
Endi shu qiymatlarni kalit so'z argumentlari sifatida kiritishga harakat qilaylik:
Bu safar kutganingizdek ishladi.
Endi biz *args
va **kwargs
ni tekshirib ko'raylik va ular nima ekanligini bilib olaylik:
Bu, args
- bu tuple va kwargs
esa dict ekanligini anglatadi.
Keling, funksiyamizga *args
va **kwargs
uchun tuple va dict ni uzatishga harakat qilaylik:
Bu yaxshi ishlamadi. Ikkala tuple va dict *args
ga kirdi. Shunday qilib, tuple uchta argumentga bo'linmadi.
Buni maxsus sintaksis yordamida ishlatishingiz mumkin:
Bu misolda, siz output()
funksiyasini *my_tuple
bilan chaqirasiz. Python tuple ichidagi alohida qiymatlarni chiqaradi va har birini argument sifatida uzatadi. Keyin siz **my_dict
ni uzatasiz, bu Python ga har bir kalit/qiymat juftligini kalit so'z argumentlari sifatida uzatish kerakligini bildiradi.
Yakuniy misol esa ikkita tuple va dict ni birgalikda uzatadi.
Qanday ajoyib!