Pythonni mustaqil


Nega boshlang‘ich odatiy qiymat obyektlar orasida taqsimlanadi?



Download 2,79 Mb.
bet100/109
Sana31.12.2021
Hajmi2,79 Mb.
#223336
1   ...   96   97   98   99   100   101   102   103   ...   109
Bog'liq
PYTHONNI MUSTAQIL O‘RGANAMIZ

Nega boshlang‘ich odatiy qiymat obyektlar orasida taqsimlanadi?
Bunday xatolik ham boshlovchi dasturchilar orasida tez-tez uchrab turadi. Quyidagi funksiyani qaraylik:

def foo(mydict={}): # xavfli: chaqiruvlar orasida taqsimlangan havola.


... compute something ...
mydict[key] = value
return mydict
Agar funksiyani birinchi marta chaqirganingizda, mydict boshqa qiymatga ega bo‘lsa, ikkinchi martada u 2 ta elementga ega bo‘ladi, chunki foo() bajarilishni boshlayotganida mydict allaqa-chon bir elementga ega bo‘lgan edi.
Aksariyat hollarda funksiyani chaqirish odatiy qiymatlar uchun yangi obyektlarning yaratilishiga olib kelishini kutishadi. Aslida bunday emas. Odatiy qiymatlar faqat bir marta, funksiyaning tav-siflanish jarayonida yaratiladi. Agar obyekt bizning misolimizdagi lug‘at kabi o‘zgaradigan bo‘lsa, funksiyaga keyingi murojaatlar uchun o‘zgartirilgan obyektdan foydalanishadi.
Aslida esa o‘zgarmaydigan obyekt (son, satr, kortejr va None obyekt)lar o‘zgartirilayotganda




126

xavf tug‘dirmaydi. Lug‘atlar, ro‘yxatlar, foydalanuvchi klasslarining ekzemlyarlari kabi o‘zgaradigan obyektlarni o‘zgartirish esa kutilmagan oqibatlarga olib kelishi mumkin.


Shuning uchun odatiy qiymatlar sifatida o‘zgaradigan obyektlardan foydalanmaslik amaliyoti keng tarqalgan. Buning o‘rniga funksiyaning ichida ham Nonedan foydalaning, argumentni None ekanligini tekshiring va yangi ro‘yxat/lug‘atlar yarating.

Quyida berilgan misoldagi kabi ish tutmang:


def foo(mydict={}):
...
Lekin mana bu misoldagi kabi yo‘l tutish mumkin:
def foo(mydict=None):
if mydict is None:
mydict = {} # lokal nomlar muhiti uchun yangi lug`at yarating
Bu xususiyatdan biz o‘zimizga kerakli holatlarda unumli foydlanishimiz mumkin. Sizda birorta uzoq vaqt bajariluvhci funksiya mavjud bo‘lsa, parametrlar va funksiyaning har bir chaqirilishi nati-jalarini kesh-xotirada saqlang, bu – keng qo‘llaniladigan metodlardan biri.

def expensive(arg1, arg2, _cache={}):


if (arg1, arg2) in _cache:
return _cache[(arg1, arg2)]
# Qiymatni hisoblash
result = ... expensive computation ...
_cache[(arg1, arg2)] = result # Natijani keshga joylashtiramiz return result

Download 2,79 Mb.

Do'stlaringiz bilan baham:
1   ...   96   97   98   99   100   101   102   103   ...   109




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2025
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish