Pythonda dəyişənlərin əhatə dairəsi (LEGB scope rules)

Aydan Samedova
Pragmatech
Published in
3 min readSep 8, 2020

Yazdığımız kodların oxunma ardıcıllığı necədir? LEGB və qaydaları nədir ?bunlar ilə tanış olaq.

Scope nədir ?

Scope -dəyişənlərin kodunuzda necə axtarıldığını idarə edir. Hər bir dəyişənin əhatə dairəsi vardır . Bir adın və ya dəyişənin əhatəsi kodunuzdakı həmin dəyişəni yaratdığınız yerdən asılıdır. Pythondakı bir dəyişənin əhatə dairəsi kodun göründüyü hissəsidir. Pythonda scope anlayışı ümumiyyətlə LEGB (local, enclosed, global, built-in) qaydası olaraq bilinən bir qayda istifadə edərək təqdim olunur. Kod üzərində nəzər yetirək :

Global - gördüyümüz kimi en yuxarıda funcsiyanın xaricində bir x dəyişənini elan edirik, bu da onu qlobal əhatə dairəsinə çevirir. Nəticədə, proqramın istənilən yerində oxuya bilirik.

Local -əhatə dairəsi, hər hansı bir Python funksiyasının və ya lambda ifadəsinin kod bloku və ya gövdəsidir(verilən kodda metodun içində daxil etdiyimiz b dəyişəni )və metodun daxilində təyin etdiyiniz adları ehtiva edir. Bu adlar yalnız metodun daxilində görünəcəkdir. Biz metodu çağırdıqca dəyər qaytaracaqdır yəni b dəyişəninin əhatəsi metodun genişliyi qədərdir. Eyni metodu bir neçə dəfə və ya rekursiv olaraq çağırsanız belə, doğrudur. Hər çağırış yeni bir local əhatə dairəsinin yaradılması ilə nəticələnəcəkdir.

Enclosed(None-local)- əhatə dairəsi yalnız iç içə (nested) funksiyalar üçün mövcud olan xüsusi bir sahədir. Local əhatə dairəsi daxili və ya iç -içə bir funksiyadırsa, əhatə dairəsi xarici və ya əhatə edən funksiyanın genişliyi qədər olacaqdır.

Built-in -Nəhayət, ən geniş sahədən danışırıq. Python kitabxanasından dəyişən çağırdıqda və ya interaktiv bir sessiya açdığınız zaman yaradılan və ya yüklənən xüsusi bir Python əhatəsidir. Bu Python əhatəsindəki dəyişənlər kodunuzun hər yerindən də əldə edilə bilər.

Qeyd: local və enclosing yalnız bir funksiya (local scope) içərisində bir ad və ya iç-içə daxili bir funksiya (local və enclosing scope ) istifadə etdiyiniz təqdirdə axtarıldığına diqqət yetirin.

Kodlara diqqətlə baxaq :

Ilk yazdığımız koddan bizə qayıdan dəyər 12 olduğu halda ikinci kodumuzda heç bir dəyişən daxil etməmişik lakin 3.141592653589793 kimi dəyər alırıq. Səbəbi qeyd etdiyimiz kimi pyhtonun öz kitabxanasından müraciət etdiyi üçün birbaşa oradan dəyər götürməsidir.

Kodlar hansı ardıcıllıq ilə oxunur ?

Kodlara nəzər yetirək : Əgər biz local scope-da dəyəri qeyd etməsək bizə onun əvəzinə də enclosed scope-dakı dəyişənin dəyərini qaytaracaq digər halda biz enclosed scope-da dəyəri qeyd etməsək bizə global scope-daki dəyişənin dəyərini qaytaracaqdır.

Nəticə

Dəyişənin əhatə dairəsi kodunuz boyunca görünürlüğünü təyin edir. Python’da əhatə dairəsi ya local, enclosing,global və ya built-in olaraq həyata keçirilir. Bir dəyişən istifadə etdikdə Python sıralamanı həll etmək üçün bu sahələri ardıcıl olaraq axtarır.

İndi edə bilərsiniz :

  1. Dəyişənlərin toqquşması ilə əlaqəli səhvlərin qarşısını almaq və ya minimuma endirmək üçün Python əhatəsindən(scope) faydalanın.
  2. Kodun qorumasını artırmaq üçün proqramlarınızdakı global və local adlardan yaxşı istifadə edin.
  3. Bütün Python kodlarınızdakı adlara daxil olmaq, dəyişdirmək və ya yeniləmək üçün tutarlı bir strategiya istifadə edin.

MƏNBƏLƏR :

--

--