Funksiyalarda parametrlərdən əlavə dəyişənlərdən də istifadə oluna bilər. Funksiya daxilində elan olunan dəyişənlər lokal, proqram daxilində elan olunanlar isə qlobal dəyişənlər adlanır. Dəyişənlərin elan olunduqları yerdən asılı olaraq fərqli təsir sahələri vardır. Lokal dəyişənlər yalnız elan olunduqları funksiya daxilində işləyir. Qlobal dəyişənlər isə həm elan olunduqları proqramda, həm də bu proqram daxilində təyin olunan bütün funksiyalarda keçərlidir.
Lokal və qlobal dəyişənlərdən istifadəni təcrübədə nəzərdən keçirək. Skriptdə yazılan aşağıdakı proqramda üç şagirdin informatikadan aldığı qiymətlər daxil edilir və iki ayrı funksiyada orta və yüksək qiymətlər tapılır:
def avgval(pts):
s = 0
for i in pts:
s += pts[i]
return s / n
def maxval(pts):
max = m
for i in pts:
if pts[i] > max:
max = pts[i]
return max
a = int(input('Əlinin qiyməti: '))
b = int(input('Vəlinin qiyməti: '))
c = int(input('Pirvəlinin qiyməti: '))
std = {'t1':a, 't2':b, 't3':c}
n = len(std)
m = 0
print('Orta qiymət:', avgval(std))
print('Yüksək qiymət:', maxval(std))
Proqramı araşdırsanız, görəcəksiniz ki, biz burada bir sıra qlobal dəyişənlərdən istifadə etdik. Onlardan n və m müvafiq olaraq avgval() və maxval() funksiyaları daxilində də istifadə olundu. Təyin olunan funksiyaların içərisində isə müxtəlif lokal dəyişənlər elan olundu. Bir məqama da diqqət yetirin ki, hər iki funksiyada eyniadlı i lokal dəyişənindən istifadə olunur. Bu tamamilə yol veriləndir, çünki fərqli yerlərdə elan olunduqlarına görə onlar mahiyyətcə ayrı-ayrı dəyişənlərdir. Yeri gəlmişkən, fərqli funksiyaların başlıqlarındakı parametrlər də eyniadlı ola bilər.
Onu da deyək ki, funksiyalara məlumatötürmə yolu yalnız arqumentlərdən istifadə etməkdən ibarət deyil. Gördüyünüz kimi, qlobal dəyişənlər vasitəsilə də bunu etmək mümkündür. Daha bir neçə misalı nəzərdən keçirək:
>>> def hscore():
print(s)
>>> s = 5
>>> hscore()
5
>>>
Bu proqramda s qlobal dəyişənindən funksiya daxilində istifadə olunur. Onu da nəzərə almaq lazımdır ki, funksiyanın, ümumiyyətlə, parametri yoxdur və o, kənardan yalnız qlobal dəyişən vasitəsilə məlumat qəbul edə bilir.
Gəlin belə bir eksperiment aparaq: funksiya daxilində eyniadlı s dəyişəni elan edək və ona fərqli qiymət mənimsədək. Sizcə, nə baş verəcək?
>>> def hscore():
s = 10
print(s)
>>> s = 5
>>> hscore()
10
>>> print('Qlobal dəyişənin qiyməti:', s)
Qlobal dəyişənin qiyməti: 5
>>>
Gördüyünüz kimi, s qlobal dəyişəninin qiyməti dəyişməz qaldı. Funksiya daxilindəki eyniadlı s dəyişəni isə lokal dəyişən kimi təyin edildi və 10 qiyməti də qlobal dəyişənə deyil, məhz ona mənimsədildi.
Əgər funksiya daxilində qlobal dəyişənin qiymətini dəyişmək tələb olunursa, bunu etməzdən qabaq dəyişənin önünə global açar sözünü yazmaq lazımdır. Bununla interpretator həmin dəyişənin qlobal dəyişən olduğunu anlayacaq:
>>> def hscore():
global s
s = 10
print(s)
>>> s = 5
>>> hscore()
10
>>> print('Qlobal dəyişənin qiyməti:', s)
Qlobal dəyişənin qiyməti: 10
>>>

“Lokal və qlobal dəyişənlər” üçün bir şərh
Şərh üçün bağlıdır.