Параметрлер
Өткен сабақта процедураны үйрендік, бірақ бір мәселе бар еді — процедура ӘРДАЙЫМ БІРДЕЙ әрекет жасайды. Ал егер бір процедураны әртүрлі сандармен қолданғың келсе ше (мыс. бірде 37-нің жай сан екенін тексеру, бірде 100-дің)? Дәл осы үшін параметр деген механизм бар — ол процедураға «сырттан» мән беруге мүмкіндік береді.
Аргумент (параметр) — процедураны шақыру кезінде негізгі программадан ішкі программаға берілетін мән.
Параметр арқылы бір ғана процедура кодын жазып, оны ӘРТҮРЛІ мәндермен қайта-қайта қолдана аламыз.
Берілді: N саны.
Табу керек: N санының жай сан екенін анықтайтын процедура.
Неге параметр қолданамыз? Егер параметрсіз жазсақ, әр санды тексеру үшін БҮТІН ЖАҢА процедура керек болар еді. Параметр арқылы бір процедура ӘРБІР санмен жұмыс істей алады.
def PrintSimple(N):
simple = 1
for i in range(2, N // 2):
if N % i == 0:
simple = 0
break
if simple == 1:
print(N, "jai san")
else:
print(N, "jai san emes")
PrintSimple(37) Жауабы: 37 jai san
Берілді: N ұзындықтағы жолды ch таңбасымен басып шығару.
Шешуі: процедура тақырыбында параметрлер үтірмен бөлінеді, шақырғанда мәндер СОЛДАН ОҢҒА қарай ретімен беріледі.
def LineOfChar(N, ch):
print(ch * N)
LineOfChar(10, '@') Жауабы: @@@@@@@@@@
Программада бір атпен екі бөлек айнымалы болуы мүмкін бе? Иә! Мұны түсіну үшін екі маңызды ұғымды білу керек — олардың «көріну аймағы» әртүрлі.
Жергілікті айнымалы — процедура немесе функция ІШІНДЕ жарияланатын, тек сол ішкі программада ғана «көрінетін» айнымалы.
Жаһандық (ауқымды) айнымалы — функция денесінен ТЫС жарияланатын айнымалы, оның көріну аймағы БҮКІЛ программаны қамтиды.
Берілді: x = 5 және y = 12 жаһандық айнымалылары бар, ал proc() процедурасының ішінде y = 9 деп жергілікті айнымалы жарияланады.
Табу керек: программа орындалғаннан кейінгі x пен y мәндері.
x = 5 # jahandyq ainymaly
y = 12 # jahandyq ainymaly
def proc():
print("func: jahandyq x = ", x)
y = 9 # jergilikti ainymaly
print("func: jergilikti y = ", y)
proc()
print("jahandyq y = ", y) Неге жаһандық y өзгермейді? Процедура ішінде x-ті ТЕК ОҚУҒА болады (өзгертпей тұрса), бірақ y = 9 жолы жаңа, ТӘУЕЛСІЗ жергілікті айнымалы құрады — оның аты жаһандықпен бірдей болғанымен, олар екі БӨЛЕК «жәшік».
func: jahandyq x = 5
func: jergilikti y = 9
jahandyq y = 12 Жауабы: процедурадан кейін де жаһандық y мәні 12 болып қала береді — жергілікті y оған әсер етпеді.
Ал егер процедура ІШІНЕН жаһандық айнымалыны ШЫНЫМЕН өзгерткің келсе ше? Мұны Python-ға арнайы айту керек:
global кілттік сөзі — функция ішінде осы атаумен жаңа жергілікті айнымалы жасамай, дәл сол ЖАҺАНДЫҚ айнымалыны қолдану/өзгерту керегін білдіреді.
Берілді: a = 25 жаһандық айнымалысы, proc() ішінде global a арқылы оны 3-ке өзгертеді.
a = 25 # jahandyq ainymaly
def proc():
global a # a - jahandyq ainymaly ekenin korsetedi
print("a ten ", a)
a = 3 # jahandyq mänin özgertemiz
proc()
print("a mani quraidy ", a) Жауабы:
a ten 25
a mani quraidy 3 global сөзінсіз функция ішінде жаһандықпен АТАСЫ бірдей айнымалыға мән берсең — бұл ЖАҢА жергілікті айнымалы жасайды, жаһандыққа әсер етпейді. global сөзі болса ғана нақты жаһандық мән өзгереді.Ерекше жағдай бар — тізім (list) сияқты «өзгермелі» (mutable) типтегі объект параметр ретінде берілгенде, ЖОҒАРЫДАҒЫ ережелер өзгереді! Себебі параметр объектінің ӨЗІНЕ (көшірмесіне емес) сілтеме жасайды.
Берілді: кесінді ұштары C = [1, 2], D = [-3, 2], ығысу векторы Y = [1, 1].
Табу керек: кесіндіні вектор бойынша параллель тасымалдайтын процедура.
def shift(a, b, x):
a[0] = a[0] + x[0]
a[1] = a[1] + x[1]
b[0] = b[0] + x[0]
b[1] = b[1] + x[1]
C = [1, 2]
D = [-3, 2]
Y = [1, 1]
shift(C, D, Y)
print(C, D) Неге C мен D да өзгереді? a мен b параметрлері C мен D тізімдерінің дәл ӨЗІНЕ сілтеме жасайды (жаңа көшірме емес), сондықтан процедура ішіндегі өзгеріс тікелей негізгі программадағы C мен D-ні өзгертеді.
Жауабы: [2, 3] [-2, 3]
global сөзінсіз функция ішінде жаһандықпен аттас айнымалыға мән беру — ЖАҢА жергілікті айнымалы жасайды.- Параметр — процедураға сырттан мән беру механизмі, бір процедураны әртүрлі мәндермен қолдануға мүмкіндік береді.
- Жергілікті айнымалы тек процедура ішінде «көрінеді», жаһандық — бүкіл программада.
- Жаһандық айнымалыны функция ішінен өзгерту үшін
globalкілттік сөзі керек. - Тізім сияқты өзгермелі типтер параметр ретінде берілгенде, процедурадағы өзгеріс негізгі программаға да тікелей әсер етеді.