*args va **kwargs bilan tanishish
Dasturlashda, biz o'xshash amalni bajaruvchi qayta ishlatiladigan kod yaratish uchun funksiya aniqlaymiz. O'sha amalni bajarish uchun, biz funksiyani muayyan qiymat bilan chaqiramiz, bu qiymat Pythonda funksiya argumenti deb ataladi.
Biz sizga Python Function va Python Function Arguments'ni o'qishni tavsiya qilamiz.
Aytaylik, biz 3 ta sonni qo'shish uchun funksiya aniqlaymiz.
1-misol: 3 ta sonni qo'shuvchi funksiya
def adder(x,y,z):
print("sum:",x+y+z)
adder(10,12,13)
Yuqoridagi dasturni ishga tushirganimizda, natija bunday bo'ladi
sum: 35
Yuqoridagi dasturda bizda uchta argumentga ega adder() funksiyasi bor: x, y va z. adder() funksiyasini chaqirayotganda uchta qiymatni uzatganimizda, natija sifatida 3 ta sonning yig'indisini olamiz.
Keling, adder() funksiyasiga 3 tadan ortiq argument uzatsak nima bo'lishini ko'ramiz.
def adder(x,y,z):
print("sum:",x+y+z)
adder(5,10,15,20,25)
Yuqoridagi dasturni ishga tushirganimizda, natija bunday bo'ladi
TypeError: adder() takes 3 positional arguments but 5 were given
Yuqoridagi dasturda, biz adder() funksiyasiga 3 ta argument o'rniga 5 ta argument uzatdik, shuning uchun TypeError oldik.
Pythonda, biz maxsus belgilar yordamida funksiyaga o'zgaruvchan sondagi argumentlarni uzatishimiz mumkin. Ikkita maxsus belgi bor:
*args (Kalit so'zsiz argumentlar)**kwargs (Kalit so'zli argumentlar)Biz funksiyalarga uzatiladigan argumentlar sonidan aminan bo'lmaganimizda *args va **kwargsdan argument sifatida foydalanamiz.
Yuqoridagi misolda bo'lgani kabi, biz funksiyaga uzatilishi mumkin bo'lgan argumentlar sonidan aminan emasmiz. Pythonda *args bor, u bizga funksiyaga o'zgaruvchan sondagi kalit so'zsiz argumentlarni uzatish imkonini beradi.
Funksiyada, o'zgaruvchan uzunlikdagi argumentlarni uzatish uchun parametr nomi oldiga yulduzcha * ishlatishimiz kerak. Argumentlar kortej sifatida uzatiladi va bu uzatilgan argumentlar funksiya ichida yulduzcha *siz parametr bilan bir xil nomga ega kortej hosil qiladi.
*2-misol: Funksiyaga o'zgaruvchan uzunlikdagi argumentlarni uzatish uchun args'dan foydalanish
def adder(*num):
sum = 0
for n in num:
sum = sum + n
print("Sum:",sum)
adder(3,5)
adder(4,5,6,7)
adder(1,2,3,5,6)
Yuqoridagi dasturni ishga tushirganimizda, natija bunday bo'ladi
Sum: 8
Sum: 22
Sum: 17
Yuqoridagi dasturda, biz adder() funksiyasiga o'zgaruvchan uzunlikdagi argument ro'yxatini uzatish imkonini beruvchi *num parametridan foydalandik. Funksiya ichida, bizda uzatilgan argumentni qo'shib, natijani chop etuvchi sikl bor. Biz funksiyaga argument sifatida o'zgaruvchan uzunlikka ega 3 ta turli kortejni uzatdik.
Python *args yordamida funksiyaga o'zgaruvchan uzunlikdagi kalit so'zsiz argumentni uzatadi, lekin biz buni kalit so'zli argumentni uzatish uchun ishlata olmaymiz. Bu muammo uchun Pythonda **kwargs deb ataluvchi yechim bor, u bizga funksiyaga o'zgaruvchan uzunlikdagi kalit so'zli argumentlarni uzatish imkonini beradi.
Funksiyada, bu turdagi argumentni belgilash uchun parametr nomi oldida ikkita yulduzcha ** ishlatamiz. Argumentlar lug'at sifatida uzatiladi va bu argumentlar funksiya ichida ikkita yulduzcha **siz parametr bilan bir xil nomga ega lug'at hosil qiladi.
**3-misol: Funksiyaga o'zgaruvchan kalit so'zli argumentlarni uzatish uchun kwargs'dan foydalanish
def intro(**data):
print("\nData type of argument:",type(data))
for key, value in data.items():
print("{} is {}".format(key,value))
intro(Firstname="Sita", Lastname="Sharma", Age=22, Phone=1234567890)
intro(Firstname="John", Lastname="Wood", Email="johnwood@nomail.com", Country="Wakanda", Age=25, Phone=9876543210)
Yuqoridagi dasturni ishga tushirganimizda, natija bunday bo'ladi
Data type of argument: <class 'dict'>
Firstname is Sita
Lastname is Sharma
Age is 22
Phone is 1234567890
Data type of argument: <class 'dict'>
Firstname is John
Lastname is Wood
Email is johnwood@nomail.com
Country is Wakanda
Age is 25
Phone is 9876543210
Yuqoridagi dasturda, bizda **data parametriga ega intro() funksiyasi bor. Biz intro() funksiyasiga o'zgaruvchan argument uzunligiga ega ikkita lug'atni uzatdik. Bizda intro() funksiyasi ichida uzatilgan lug'atning ma'lumotlari bilan ishlaydigan va lug'atning qiymatini chop etadigan for sikli bor.
*args va **kwargs — funksiyaga o'zgaruvchan uzunlikdagi argumentni qabul qilish imkonini beruvchi maxsus kalit so'zlar.*args o'zgaruvchan sondagi kalit so'zsiz argumentlarni uzatadi va ular ustida kortej amallarini bajarish mumkin.**kwargs funksiyaga o'zgaruvchan sondagi kalit so'zli argumentlar lug'atini uzatadi va ular ustida lug'at amallarini bajarish mumkin.*args va **kwargs funksiyani moslashuvchan qiladi.