Funksiya - 1 (funksiya nima?)
FUNKSIYA NIMA?
Funksiya ma'lum bir vazifani bajarishga mo'ljallangan kodlar yig'indisi. Biz shu paytgacha bir nechta tayyor funksiyalardan foydalanib keldik. Misol uchun print() funksiyasi konsolga matn chiqarish uchun, range() funksiyasi esa ma'lum oraliqdagi sonlarni yaratish uchun ishlatiladi.
Aslida har qanday funksiyaning ortida ham bir necha qatordan iborat kod bo'ladi, lekin biz funksiyaga murojat qilganda uning nomini yozamiz xolos. Funksiya ortidagi kod esa biz uchun yashirin bo'lib qolaveradi. Funksiyalarning qulayligi ham shunda. Dastur davomida ma'lum bir kodlarni qayta-qayta yozmaslik uchun biz ularni jamlab, bitta funksiya ichiga joylashimiz va dastur davomida bu kodlarga funksiya nomi orqali murojat qilishimiz mumkin.
Funksiyalar turlicha bo'ladi, ba'zi funksiyalar sizdan qiymat qabul qilib, konsolga biror ma'umot chiqaradi, ba'zilari esa sizdan qabul qilgan qiymat ustida turli amallar bajarib yangi qiymat qaytaradi. Foydalanuvchidan mutlaqo qiymat qabul qilmaydigan funksiyalar ham mavjud.
Ushbu mavzuda siz qanday qilib Pythonda yangi funksiya yaratish, unga murojat qilish, tekshirish va to'g'rilashni o'rganasiz. Shuningdek darsimiz yakunida dasturimizni bir nechta faullarga ajratishni va funksiylarani alohida, module deb ataluvchi fayllarga joylashni ham o'rganamiz.
FUNKSIYA YARATAMIZ
Keling oddiy, salom_ber deb nomlangan funksiya yaratamiz. Bu funksiya murojat qilganimizda konsolga "Assalom alaykum!" degan xabarni chiqarsin.
def salom_ber():
"""Salom beruvchi funksiya"""
print("Assalomu alaykum!")Kodni qatroma-qator tahlil qilaylik:
- Avvalo
defoperatori yordamida Pythonga funksiya yaratayotganimizni bildirdik.defdan so'ng esa funksiyamizga nom berdik va qavslarni ochib, yopdik. Bizning funksiyamiz foydalanuvchidan hech qanday qiymat qabul qilmaydi, shuning uchun ham qavs ichi bo'sh. Keyingi misollarda foydalanuvchidan qiymat qabul qiluvchi funksiyalarni ham ko'ramiz. defqatoridan keyin o'ngga surib yozilgan har qanday kod funksiyaning badani hisoblanadi. 2-qatorda biz uchta ketma-ket qo'shtirnoq ichida funksiya haqida ma'lumot berdik. Python mana shu ma'lumotni o'qib, dasturchi funksiya haqida bilmoqchi bo'lganda aynan shu matnni ko'rsatadi.- Oxirgi qatorimizda esa
"Assalomu alaykum!"matnini konsolga chiqarishni buyurdik. Bizning sodda funksiyamizning asosiy vazifasi ham shu.
Mana funksiya tayyor. Endi bu funksiyadan foydalanish uchun uni chaqiramiz. Buning uchun funksiya nomini yozamiz va qavslarni ochib, yopamiz (esingizda bo'lsa bizning funksiyamiz qiymat qabul qilmaydi, shuning uchun qavslar ichi bo'sh).
salom_ber()
Funksiyaga nom berishda fe'l, ya'ni harakatni bildiruvchi so'zlar yoki jumlalardan foydalaning. Bu bilan siz o'zgaruvchi va funksiya o'rtasini farqlashingiz oson bo'ladi. Misol uchun, yuqorida biz funksiyamizni salom emas salom_ber deb nomladik.
FUNKSIYAGA QIYMAT UZATISH
Avvalgi sodda funksiyamiz foydalanivchidan hech qanday qiymat olmaydi va barchaga birday "Assalomu alaykum!" deb javob qiladi. Keling funksiyaga o'zgartirish kiritamiz, funksiya foydalanuvchi ismini qabul qilib, unga ismi bilan murojat qilsin. Buning uchun funksiya nomidan keyin, qavs ichida foydalanuvchi berishi kerak bo'lgan qiymatni ko'rsatamiz.
def salom_ber(ism):
"""Fodyalanuvchi ismini qabul qilib, unga salom beruvchi funksiya"""
print(f"Assalomu alaykum, hurmatli {ism.title()}!")Mana endi fuknsiyamiz foydalanuvchidan ism degan qiymatni ham kutadi.
salom_ber('hasan')Natija: Assalomu alaykum, hurmatli Hasan!
Agar funksiyaga murojat qilishda, unga qiymat bermasak xatolik vujudga keladi:
salom_ber()
Natija: TypeError: salom_ber() missing 1 required positional argument: 'ism'
DOCSTRING
Avval aytganimizdek, funksiya yaratganda, funksiya qanday ishlashi haqida qisqacha ma'lumot berib ketish o'zimiz uchun ham, kelajakda bizni funksiyamizni ishlatadigan boshqa dasturchilar uchun ham juda foydali bo'ladi. Quyidagi funksiyaning 2-qatorda biz funksiya haqida ma'lumot berdik. Bu qator docstring deyiladi. Murakkab funksiyalar uchun docstringni bir necha qatorga bo'lib yozishingiz mumkin
def salom_ber(ism):
"""Fodyalanuvchi ismini qabul qilib,
unga salom beruvchi funksiya"""
print(f"Assalomu alaykum, hurmatli {ism.title()}!")Xo'sh, bu ma'lumot qachon va qayerda ko'rsatiladi? Dastur yozish jarayonida funksiya nomini yozishingiz bilan, docstring ko'rsatiladi:
Docstring - funksiya haqida ma'lumot
Docstringni konsolga chiqarish uchun print(funksiya_nomi.__doc__) deb ham yozishimiz mumkin:
print(salom_ber.__doc__)
FUNKSIYAGA BIR NECHA BOR MUROJAT QILISH
Funksiya yaratishning asl maqsadlaridan biri, biz unga qayta-qayta, yangi qiymatlar bilan murojat qilishimiz mumkin.
salom_ber('hasan')
salom_ber('olim')Assalomu alaykum, hurmatli Hasan!
Assalomu alaykum, hurmatli Olim!
ARGUMENT VA PARAMETER
Funksiya yaratishda, qavs ichida berilgan, funksiya to'g'ri ishlashi uchun uzatiladigan qiymat parameter deb ataladi. Yuqoridagi misolda ism bu salom_ber funksiyasining parametri.
Foydalanuvchi funksiyaga murojat qilishda funksiyaga uzatgan qiymat esa argument deb ataladi. salom_ber('hasan') kodida 'hasan' bu argument.
Ba'zi manbalarda yoki darslarda argument va parametr so'zlari almashtirib ishlatilishi ham kuzatiladi.
FUNKSIYAGA BIR NECHTA ARGUMENT UZATISH
Shunday funksiyalar bor, bir emas bir nechta parameter talab qilishi mumkin, foydalanuvchi esa o'z navbatida bir nechta argumentlar taqdim qilishi kerak. Funksiyaga argument uzatishning bir necha usuli bor, keling ular bilan birma bir tanishamiz.
TO'G'RI TARTIBDA UZATISH
Bu usulda, funksiya parametrlari qaysi tartibda yozilgan bo'lsa, argumentlar ham aynan shu ketma-ketlikda uzatilishi kerak. Keling bitta misol ko'ramiz. Quyidagi funksiya foydalanuvchining ismi va familiyasini parametr sifatida qabul qilib, ularni jamlab xabar chiqaradi.
def toliq_ism(ism, familiya):
"""Foydalanuvchi ism va familiyasini jamlab chiqaruvchi funksiya"""
print(f"Foydalanuvchi ismi: {ism.title()}\n"
f"Foydalanuvchi familiyasi: {familiya.title()}")Yuqoridagi funksiya to'g'ri natija chiqarishi uchun argumentlarni ism va familiya ketma-ketligida kiritishimiz lozim.
toliq_ism('olim','hakimov')Foydalanuvchi familiyasi: Hakimov
Agar argumentlarni noto'g'ri ketma-ketlikda bersak, natija ham biz kutganday chiqmaydi:
toliq_ism('hakimov','olim')Foydalanuvchi familiyasi: Olim
Ko'p xolatlarda esa, argumentlarni noto'g'ri tartibda uzatish xatolikka ham olib kelishi mumkin.
def yosh_hisobla(ism, tugilgan_yil):
"""Foydalanuvchi yoshini hisoblaydigan dastur"""
print(f"{ism.title()} {2025-tugilgan_yil} yoshda")yosh_hisobla('olim', 1997)yosh_hisobla(1997, 'olim')
Natija: AttributeError: 'int' object has no attribute 'title'
KALIT SO'Z BILAN UZATISH
Yuqoridagi kabi holatlarning oldini olish uchun argumentlarni parametr nomi bilan qo'shib uzatishimiz mumkin. Buning uchun funksiyaga o'zgartirish kiritish talab qilinmaydi.
yosh_hisobla(tugilgan_yil=1997, ism='olim')
Yuoqirdagi misolda funksiyani chaqirishda biz parametrlar ketma-ketligiga rioya qilmagan bo'lsakda, argumentlarni parametr_nomi=qiymat ko'rinishida yozganimiz sababli funksiya to'g'ri ishladi.
Huddi shu kabi yuqoridagi toliq_ism funksiyasiga murojat qilishimiz mumkin:
toliq_ism(familiya='hakimov',ism='olim')
Foydalanuvchi familiyasi: Hakimov
Kalit so'z usulidan foydalanganda parametr nomi to'g'ri yozilganiga ahamiyat bering.
STANDART QIYMAT
Funksiya yaratishda, istalgan parametr uchun standart qiymat ko'rsatib ketishimiz mumkin. Agar foydalanuvchi shu parametr uchun qiymat (argument) kiritmasa, funksiya bajarilishi jarayonida standart qiymat ishlatiladi. Standart qiymatni funksiya yaratish vaqtidaparametr = qiymat ko'rinishida beriladi.
def yosh_hisobla(tugilgan_yil, joriy_yil=2025): # joriy yil uchun st.qiymat 2020
"""Foydalanuvchi tug'ilgan yilidan uning yoshini hisoblaydi"""
print(f"Siz {joriy_yil-tugilgan_yil} yoshdasiz")Yuqoridagi misolda biz joriy_yil parametriga 2020 standart qiymatini berib ketdik.
Funksiya yaratishda, standart qiymatga ega parametrlar doim oxirida yozilishi kerak. Aks holda xatolik yuzaga keladi.
Keling avval funksiyani ikkala argument bilan chaqiramiz:
yosh_hisobla(1995,2020)
Endi esa faqat bitta argument (tugilgan_yil) bilan chaqiramiz:
yosh_hisobla(1993)
Bu safar foydalanuvchi joriy_yil ni kiritmagani sababli, standart qiymat, 2020 ishlatildi.
FUNKSIYAGA MUROJAT QILISHDA XATOLIKLAR
Funksiyalarga murojat qilishda turli xatoliklarga yo'l qo'shimiz tabiiy. Bunday holatlarda Python qaytargan xatoni sinchiklab o'qib, xato qayerdaligini topishimiz va uni to'g'rilashimiz zarur. Quyida men avvalroq yaratgan funksiyalarimizni xato usullar bilan chaqiraman. Xato nimada ekanini topa olasizmi?
def yosh_hisobla(tugilgan_yil, joriy_yil=2020):
"""Foydalanuvchi tug'ilgan yilidan uning yoshini hisoblaydi"""
print(f"Siz {joriy_yil-tugilgan_yil} yoshdasiz")
tyil = input("Tug'ilgan yilingizni kiriting: ")
yosh_hisobla(tyil)Natija: TypeError: unsupported operand type(s) for -: 'int' and 'str'
def yosh_hisobla(tugilgan_yil, joriy_yil):
"""Foydalanuvchi tug'ilgan yilidan uning yoshini hisoblaydi"""
print(f"Siz {joriy_yil-tugilgan_yil} yoshdasiz")
yosh_hisobla(1993)Natija: TypeError: yosh_hisobla() missing 1 required positional argument: 'joriy_yil'
def salom_ber():
"""Salom beruvchi funksiya"""
print("Assalomu alaykum!")
salom_ber('hasan')Natija: TypeError: salom_ber() takes 0 positional arguments but 1 was given
def toliq_ism(ism, familiya):
"""Foydalanuvchi ism va familiyasini jamlab chiqaruvchi funksiya"""
print(f"Foydalanuvchi ismi: {ism.title()}\n"
f"Foydalanuvchi familiyasi: {familiya.title()}")
toliq_ism('olim hakimov')Natija: TypeError: toliq_ism() missing 1 required positional argument: 'familiya'
AMALIYOT
- Foydalanuvchi ismi va yoshini so'rab, uning tug'ilgan yilini hisoblaydigan funksiya yozing.
- Foydalanuvchidan son olib, uning kvadrati va kubini konsolga chiqaruvchi funksiya yozing.
- Foydalanuvchidan son olib, son juft yoki toqligini konsolga chiqaruvchi funksiya yozing.
- Foydalanuvchidan ikkita son olib, ulardan kattasini konsolga chiqaruvchi funksiya yozing. Agar sonlar teng bo'lsa "Sonlar teng" degan xabarni chiqaring.
- Foydalanuvchidan x va y sonlarini olib, xyxyni konsolga chiqaruvchi funksiya yozing.
- Yuqoridagi funksiyada
yuchun2standart qiymatini bering. - Foydalanuvchidan son qabul qilib, sonni 2 dan 10 gacha bo'lgan sonlarga qoldiqsiz bo'linishini tekshiruvchi funksiya yozing. Natijalarni konsolga chiqaring.
QIYMAT QAYTARUVCHI FUNKSIYA
FUNKSIYADAN ODDIY QIYMAT QAYTARISH
Keling ism va familiya degan parametrlarni olib, toliq_ism qaytaradigan sodda funksiya yasaymiz.
def toliq_ism_yasa(ism, familiya):
"""Toliq isma qaytaruvchi funksiya"""
toliq_ism = f"{ism} {familiya}"
return toliq_ism # qiymat qaytarish uchun return operatorini ishlatamizYuqoridagi funksiyamizga ahamiyat bersangiz, uning badanida endi print() funksiyasi yo'q. Buning o'rniga, funksiyamiz return operatori yordamida toliq_ism degan o'zgaruvchining qiymatini qaytaradi.
Endi funksiyadan to'g'ri foydalanish uchun u qaytargan qiymatni biror o'zgaruvchiga yuklashimiz kerak:
talaba1 = toliq_ism_yasa('olim','hakimov')
talaba2 = toliq_ism_yasa('hakim','olimov')Yuqoridagi kodlarni bajarganimizda konsolga hech narsa chiqmaydi. talaba1 va talaba2 o'zgaruvchilarining qiymatini ko'rish uchun esa print() funksiyasidan foydalanamiz.
print(f"Darsga kelmagan talabalar: {talaba1} va {talaba2}")Natija: Darsga kelmagan talabalar: Olim Hakimov va Hakim Olimov
Demak, qiymat qaytaradigan funksiyaning afzalligi shundaki, biz bu qiymatlardan keyin ham bemalol foydalanishimiz mumkin.
Funksiya ichidagi o'zgaruvchilar mahalliy yoki ichki o'zgaruvchilar deyiladi (local variables). Ichki o'zgaruvchilar faqatgina funksiya ichida mavjud bo'ladi, ularga tashqaridan murojat qilib bo'lmaydi. Shuning uchun ham funksiya o'zgaruvchi emas qiymat qaytaradi.
IXTIYORIY ARGUMENTLAR
Avvalgi darsizmida funksiyalarga standart parametr berishni ko'rgan edik. Huddi shu usul bilan, ba'zi argumentlarni ixtiyoriy qilishimiz mumkin. Ya'ni funksiya ishlashi uchun bu agrumentarni kiritish majburiy emas, ixtiyoriy bo'ladi.
Keling avvalgi funksiyamizni o'zgartiramiz va unga yana bitta otasiningismi degan paramter qo'shamiz, lekin bu parametr ixtiyoriy bo'ladi. Buning uchun funksiya yaratishda otasining_ismi='' deb yozib ketamiz.
def toliq_ism_yasa(ism, familiya, otasining_ismi=''):
"""Toliq isma qaytaruvchi funksiya"""
if otasining_ismi: # otasining_ismi mavjudligini tekshiramiz
toliq_ism = f"{ism} {otasining_ismi} {familiya}"
else:
toliq_ism = f"{ism} {familiya}"
return toliq_ism.title()Yuqoridagi funksiyani tahlil qiladigan bo'lsak, 3-qatorda biz otasiningismi parametri bo'sh yoki yo'qligini tekshiramiz. Pythonda if dan so'ng bo'sh bo'lmagan matn (string) yozsak, bu shart True qaytaradi. Demak, bu ixtiyoriy parametr kiritilgani yoki yo'qligiga qarab, funksiyamiz turlicha qiymat qaytaradi.
talaba1 = toliq_ism_yasa('olim','hakimov') #otasining_ismi kiritilmadi
talaba2 = toliq_ism_yasa('hakim','olimov','abrorovich')
print(f"Darsga kelmagan talabalar: {talaba1} va {talaba2}")Natija: Darsga kelmagan talabalar: Olim Hakimov va Hakim Abrorovich Olimov
FUNKSIYADAN LUG'AT QAYTARAMIZ
Funksiyadan sodda qiymat emas, ro'yxat, lu'gat va boshqa ma'lumot turlarini ham qaytarishimiz mumkin. Quyidagi funksiya ham mashina haqidagi ma'lumotlarni jamlab, ularni lug'at ko'rinishida qaytaradi:
def avto_info(kompaniya, model, rangi, korobka, yili, narhi=None):
avto = {'kompaniya':kompaniya,
'model':model,
'rang':rangi,
'korobka':korobka,
'yil':yili,
'narh':narhi}
return avtoE'tibor bering, narhi nomli parametrga None standart qiymatini berib ketdik. None Pythonda mavjud emas ma'nosini beradi, va if yordamida tekshirganda False mantiqiy qiymatini qaytardi.
Quyidagi kodni tahlil qilishni sizga vazifa sifatida qoldiramiz:
avto1 = avto_info('GM','Malibu','Qora','Avtomat',2018)
avto2 = avto_info('GM','Gentra','Oq','Mexanika',2016,15000)
avtolar = [avto1, avto2]
print('Onlayn bozordagi mavjud avtomashinalar:')
for avto in avtolar:
if avto['narh']:
narh = avto['narh']
else:
narh = "Noma'lum"
print(f"{avto['rang']} {avto['model']}. Narhi: {narh}")FUNKSIYADAN RO'YXAT QAYTARAMIZ
Biz avvalroq range() funksiyasi bilan tanishgan edik. Bu funksiya 2 ta son qabul qilib, shu ikki son orali'g'idagi sonlarni qaytaradi. Keling biz oraliq() degan yangi funksiya yaratamiz. range() dan farqli ravishda, funksiyamiz 2 son oralig'idagi sonlarni ro'yxat ko'rinishida qaytarsin.
def oraliq(min,max):
sonlar = [] # bo'sh ro'yxat
while min<max:
sonlar.append(min)
min += 1
return sonlarprint(oraliq(0,10)) print(oraliq(10,21))
Yuqoridagi funksiyaga uchinchi, qadam deb nomlangan ixtiyoriy parameterni qo'sha olasizmi?
print(oraliq(0,21,2)) # 0 dan 21 gacha 2 qadam bilan
Natija: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
FUNKSIYALARNI TSIKLDA ISHLATISH
Funksiyalarni takrorlash uchun tsikldan foydalanishimiz mumkin. Quyidagi misolda biz while yordamida avvalroq yaratgan avto_info funksiyamizni bir necha bor chaqiramiz va salondagi avtolar ro'yxatini shakllantiramiz. Bunda, ro'yxatning har bir elementi avto_info funksiyasidan qaytgan lug'at bo'ladi.
print("Saytimizdagi avtolar ro'yxatini shakllantiramiz.")
avtolar=[] # salondagi avtolar uchun bo'sh ro'yxat
while True:
print("\nQuyidagi ma'lumotlarni kiriting",end='')
kompaniya=input("Ishlab chiqaruvchi: ")
model=input("Modeli: ")
rangi=input("Rangi: ")
korobka=input("Korobka: ")
yili=input("Ishlab chiqarilgan yili: ")
narhi=input("Narhi: ")
#Foydalanuvchi kiritdan ma'lumotlardan avto_info yordamida
#lug'at shakllantirib, har bir lug'atni ro'yxatga qo'shamiz:
avtolar.append(avto_info(kompaniya, model, rangi, korobka, yili, narhi))
# Yana avto qo'shish-qo'shmaslikni so'raymiz
javob = input("Yana avto qo'shasizmi? (yes/no): ")
if javob=='no':
breakYuqoridagi funksiyani Pythonda bajarib kor'ing. Ro'yxatga bir necha qiymatlar qo'shing. Natijalarni konsolga chiroyli qilib chiqaring:
AMALIYOT
- Foydanaluvchidan ismi, familiyasi, tug'ilgan yili, tug'ilgan joyi, email manzili va telefon raqamini qabul qilib, lug'at ko'rinishida qaytaruvchi funksiya yozing. Lug'atda foydalanuvchu yoshi ham bo'lsin. Ba'zi argumentlarni kiritishni ixtiyoriy qiling (masalan, tel.raqam, el.manzil)
- Yuqoridagi funksiyani
whileyordamida bir necha bor chaqiring, va mijozlar degan ro'yxatni shakllantiring. Ro'yxatdagi mijozlar haqidagi ma'lumotni konsolga chiqaring. - Uchta son qabul qilib, ulardan eng kattasini qaytaruvchi funksiya yozing
- Foydalanuvchidan aylaning radiusini qabul qilib olib, uning radiusini, diametrini, perimetri va yuzini lug'at ko'rinishida qaytaruvchi funksiya yozing
- Berilgan oraliqdagi tub sonlar ro'yxatini qaytaruvchi funksiya yozing (tub sonlar —faqat birga va o'ziga qoldiqsiz bo'linuvchi, 1 dan katta musbat sonlar)
- Foydalanuvchidan son qabul qilib, shu son miqdoricha Fibonachchi ketma-ketligidagi sonlar ro'yxatni qaytaruvchi funksiya yozing. Ta’rif: Har bir hadi o’zidan oldingi ikkita hadning yig’indisiga teng bo’lgan ketma-ketlik Fibonachchi ketma-ketligi deyiladi. Bunda boshlang’ish had ko’pincha 1 deb olinadi.
1, 1, 2, 3, 5, 8, 13, 21, 34, 55,...
FUNKSIYAGA RO'YXAT UZATISH
Biz avvalgi darslarimizda funksiyaga parametr sifatida yagona qiymat berayotgan edik. Aslida, bu bilan cheklanmasdan, funksiyaga ro'yxat (list) ham berishimiz mumkin. Bunda, funksiya ro'yxat qiymatlariga to'g'ridan-to'g'ri murojat qila oladi.
Keling talabalarni baholaydigan funksiya yozamiz. Funksiyamiz talabalar ro'yxatini qabul qilib oladi, ro'yxatdan har bir talabani sug'urib olib (.pop()), bahosini kiritishni so'raydi. Talaba ismi va bahosini lug'atga joylab, yakuniy lug'atni foydalanuvchiga qaytaradi.
def bahola(ismlar):
baholar = {}
while ismlar:
ism = ismlar.pop()
baho = input(f"Talaba {ism.title()}ning bahosini kiriting: ")
baholar[ism]=baho
return baholar
talabalar = ['ali', 'vali', 'hasan', 'husan']
baholar = bahola(talabalar)
print(baholar)RO'YXATGA O'ZGARTIRISH KIRITISH
Funksiyaga ro'yxat uzatganimizda, funksiya ro'yxat elementlariga to'g'ridan-to'g'ri murojat qila oladi. Ro'yxatga funksiya ichida kiritilgan o'zgartirishlar asl ro'yxatga ham ta'sir qiladi. Avvalgi misolimizga qaytaylik:
talabalar = ['ali', 'vali', 'hasan', 'husan'] baholar = bahola(talabalar) print(talabalar)
Yuqoridagi funksiya unga uzatilgan ro'yxat ichidagi talabalarning ismini .pop() yordamida sug'urib olgani uchun bizning asl ro'yxatimiz ham bo'shab qoldi. E'tibor bering, funksiya tashqarisidagi va ichidagi ro'yxatlar ikki hil nomlangan bo'lsada (talabalar va ismlar), ikkalasi ham xotiradagi bitta ro'yxatga bog'langani sabab ulardan biriga o'zgartirish kiritilishi bilan, ikkinchisi ham o'zgaradi.
Ikki o'zgaruvchi ham bitta ro'yxatga bog'langan
ASL RO'YXATGA O'ZGARTIRISH KIRITISHNING OLDINI OLISH
Agar funksiya asl ro'yxatga o'zgartirish kiritishini istamasangiz, funksiyaga ro'yxatning o'zini emas, uning nusxasini uzatish mumkin. Buning uchun funksiya parametrini royxat_nomi[:] ko'rinishida yozish kifoya. Bunda [:] operatori ro'yxatdan nusxa olishni bildiradi:
talabalar = ['ali', 'vali', 'hasan', 'husan'] baholar = bahola(talabalar[:]) print(talabalar)
Natija: ['ali', 'vali', 'hasan', 'husan']
AMALIYOT
- Matnlardan iborat ro'yxat qabul qilib, ro'yxatdagi har bir matnning birinchi harfini katta harfga o'zgatiruvchi funksiya yozing.
ismlar = ['ali', 'vali', 'hasan', 'husan'] katta_harf(ismlar) print(ismlar)
Kutilgan natija: ['Ali', 'Vali', 'Hasan', 'Husan']
- Yuoqirdagi funksiyani asl ro'yxatni o'zgartirmaydigan va yangi ro'yxat qaytaradigan qilib o'zgartiring
ismlar = ['ali', 'vali', 'hasan', 'husan'] yangi_ismlar = katta_harf(ismlar) print(ismlar) print(yangi_ismlar)