Scope

Barcha dasturlash tillarida doira tushunchasi mavjud.

SU

Doira (Scope)

Barcha dasturlash tillarida doira tushunchasi mavjud. Doira dasturlash tiliga qanday o'zgaruvchilar yoki funksiyalar mavjudligini bildiradi.

Keling, misolga qaraylik:

>>> name = 'Mike'
>>> def welcome(name):
...     print(f'Welcome {name}')
...
>>> welcome()
Traceback (most recent call last):
  Python Shell, prompt 34, line 1
builtins.TypeError: welcome() missing 1 required positional argument: 'name'
>>> welcome('Nick')
Welcome Nick
>>> name
'Mike'

name o'zgaruvchisi welcome() funksiyasidan tashqarida aniqlangan. Agar siz welcome() funksiyasini argument uzatmasdan chaqirsangiz, u xato beradi, garchi argument o'zgaruvchi nomiga mos bo'lsa ham. Agar siz welcome() ga qiymat uzatsangiz, o'zgaruvchi faqat welcome() funksiyasi ichida o'zgaradi. Siz funksiyadan tashqarida aniqlagan name o'zgaruvchisi o'zgarmas holda qoladi.

Keling, funksiyalar ichida o'zgaruvchilarni aniqlagan misolga qaraylik:

>>> def add():
...     a = 2
...     b = 4
...     return a + b
...
>>> def subtract():
...     a = 3
...     return a - b
...
>>> add()
6
>>> subtract()
Traceback (most recent call last):
  Python Shell, prompt 40, line 1
  Python Shell, prompt 38, line 3
builtins.NameError: name 'b' is not defined

add() funksiyasida siz a va b ni aniqlaysiz va ularni qo'shasiz. a va b o'zgaruvchilarining mahalliy doirasi mavjud. Bu shuni anglatadiki, ular faqat add() funksiyasi ichida ishlatilishi mumkin.

subtract() funksiyasida siz faqat a ni aniqlaysiz, lekin b ni ishlatishga harakat qilasiz. Python subtract() funksiyasida b mavjudligini tekshirmaydi, faqat dastur ishga tushganda amalga oshiradi.

Bu, Python sizga subtract() funksiyasini chaqirmaguncha, buni bajarish kerakligini bildirmaydi, shuning uchun siz yuqorida hech qanday xatoni ko'rmaysiz.

Python'da o'zgaruvchilarni funktsiyalar orasida ishlatish uchun maxsus global kalit so'zi mavjud. Keling, kodni yangilab ko'raylik:

>>> def add():
...     global b
...     a = 2
...     b = 4
...     return a + b
...
>>> def subtract():
...     a = 3
...     return a - b
...
>>> add()
6
>>> subtract()
-1

Bu safar siz add() funksiyasining boshida b ni global deb aniqlaysiz. Bu sizga subtract() ichida b ni ishlatish imkonini beradi, garchi siz uni o'sha joyda aniqlamagan bo'lsangiz ham.

Global o'zgaruvchilarni ishlatish odatda tavsiya etilmaydi. Ularni katta kod fayllarida e'tibordan chetda qoldirish oson, bu esa noaniq xatolarni aniqlashni qiyinlashtiradi. Masalan, agar siz add() dan oldin subtract() ni chaqirgan bo'lsangiz, hali ham xatoga duch kelasiz, chunki b global bo'lsa ham, u add() bajarilguncha mavjud bo'lmaydi.

Ko'pincha global o'zgaruvchilarni ishlatmoqchi bo'lganingizda, o'rniga sinfni (class) ishlatishingiz mumkin. Sinflar haqida keyingi bobda bilib olasiz.

Agar siz nima qilayotganingizni tushunsangiz, global o'zgaruvchilarni ishlatishda hech qanday muammo yo'q. Ular ba'zan foydali bo'lishi mumkin. Lekin ulardan ehtiyotkorlik bilan foydalanish kerak.

Ushbu sahifada

Xato haqida xabar berish