1. Python tili imkoniyatlari Pythonni ko`chirish


Pyhtonning global va lokal o`zgaruvchilari uchun qoidalar qanday?



Yüklə 2,19 Mb.
səhifə70/78
tarix19.12.2023
ölçüsü2,19 Mb.
#152124
1   ...   66   67   68   69   70   71   72   73   ...   78
1. Python tili imkoniyatlari Pythonni ko`chirish

Pyhtonning global va lokal o`zgaruvchilari uchun qoidalar qanday?


Pythonda faqatgina funksiyaning ichidangina murojaat qilinadigan o`zgaruvchilar global o`zgaruvchi hisoblanadi. Agar o`zgaruvchiga yangi qiymat funksiya tanasining ichida o`zlashtiriladigan bo`lsa, u lokal o`zgaruvchi bo`ladi va sizga kerak bo`lsa, undan global o`zgaruvchi sifatida foydalanish uchun siz bunday imkoniyatni alohida ko`rsatib o`tishingiz kerak bo`ladi.
Bu bir qarashda murakkab bo`lib tuyulsada, lekin bu holatni tushuntirib beraylik: Bir tomondan, o`zlashtirilayotgan o`zgaruvchilar uchun global talabi bar da yuzaga kelishi mumkinbo`lgan kutilmagan holatlarning oldini olish uchun muhimdir. Boshqa tomondan esa, agar global so`zi har qanday global o`zgaruvchilar uchun majburiy bo`lganida, siz bu so`zdan har doim foydalanishga majbur bo`lar edingiz. Bu holda siz har bir tarkibiy funksiya yoki import qilinayotgan komponentni ham global sifatida doim e`lon qilishga majbur bo`lar edingiz.

Nega takrorlanish siklida turli qiymatlar bilan aniqlangan lambda funksiyalar bir xil qiymat qaytaryapti?


Masalan, siz quyidagicha kod yozdingiz deb faraz qilaylik:

>>> squares = []
>>> for x in range(5):
... squares.append(lambda: x**2)

Bu bizga x ** 2 ni hisoblovchi 5 ta funksiyadan iborat ro`yxatni beradi. Ularga murojaat qilganimizda, ular bizga mos ravishda 0, 1, 4, 6 va 9 larni qaytarishini taxmin qilishimiz mumkin. Lekin, amalda esa ularning barchasi 16 ni qaytarayotganligini ko`ramiz:



>>> squares[2]()
16
>>> squares[4]()
16

Bunday holatning sababi shundaki, x lambda uchun local emas va tashqi ko`rinish sohasida ham aniqlangandir. Buning natijasida u aniqlanganida emas, chaqirilganida hosil bo`ladi.


Takrorlashlar yakunida x = 4 bo`ladi, shuning uchun ham barcha holatlar uchun 4 ** 2 ning natijalari 16 ga teng bo`lib qoladi. Bunga ishonch hosil qilish uchun x ning qiymatini o`zgartirib, natijani tekshirish kifoya:

>>> x = 8
>>> squares[2]()
64



>>> squares = []
>>> for x in range(5):
... squares.append(lambda n=x: n**2)

Bu holatning oldini olish uchun, o`zgaruvchilarning qiymatlarini lokal holatda saqlab turish kerak.


Bu yerda n=x funksiya uchun lokal bo`lgan n o`zgaruvchini yaratadi hamda funksiyaning aniqlanish jarayonidayoq hisoblanadi:



>>> squares[2]()
4
>>> squares[4]()
16

Bunday holat nafaqat anonim, balki oddiy funksiyalar uchun ham o`rinlidir.



Yüklə 2,19 Mb.

Dostları ilə paylaş:
1   ...   66   67   68   69   70   71   72   73   ...   78




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə