Лекция · 3.3

Қолданушы функциялары

Өткен екі сабақта процедура мен параметрді үйрендік. Процедура бір нәрсе істейді (мыс. экранға шығарады), бірақ ЕСЕПТЕЛГЕН НӘТИЖЕНІ ешкімге бермейді. Ал егер сол нәтижені кейін басқа жерде ПАЙДАЛАНҒЫҢ келсе ше? Дәл осы үшін функция бар — ол әрекет орындап қана қоймай, нәтижені «қолыңа ұстатады».

Функция және return операторы

Функция — процедура сияқты, аргументтерді қабылдай алатын көмекші алгоритм. Ол үш бөліктен тұрады: атауы, аргументтері (параметрлері) және функция денесі.

def testfunc(myname):
    print('Salem, %s' % myname)

testfunc('Samal')
Анықтама
Функцияның процедурадан айырмашылығы — функция ӘРҚАШАН нәтижелік мәнді қайтарады (сан, символ немесе басқа объект түрі). Шақырылған функцияның нәтижесі дәл сол шақыру нүктесіне қайтарылады.
Анықтама
return оператoры: 1) оң жағындағы өрнекті есептейді; 2) функцияның орындалуын ТОҚТАТАДЫ; 3) есептелген мәнді функция нәтижесі ретінде қайтарады.

Python-да көптеген дайын (кіріктірілген) функциялар бар: символдармен жұмыс істейтіндер — ord(), chr(), len(); математикалық — abs(), round(), pow(), max(), min(), sum().

Функция есептері
Есеп (орта): жай сан анықтау

Берілді: N саны.

Табу керек: N-нің жай немесе құрама сан екенін анықтайтын функция.

import math

def jaisan(K):
    p = 0
    for i in range(2, round(math.sqrt(K))):
        if K % i == 0:
            p = 1
    if p == 0:
        print('jai san')
    else:
        print('qurama san')
    return

N = int(input('Sandy engiz='))
if N == 4 or N == 6:
    print('qurama san')
else:
    jaisan(N)

Жауабы: N=73 үшін — jai san.

Есеп (орта): цифрлар қосындысы

Берілді: K, X, Y сандары.

Табу керек: әр санның цифрларының қосындысын шығаратын функция.

Неге бір ғана функция жеткілікті? Функция параметр қабылдайтындықтан, оны K, X, Y-ге АЛМА-КЕЗЕК шақыруға болады — әр санға жеке функция жазудың қажеті жоқ.

def sumDigits(n):
    sum = 0
    while n != 0:
        sum += n % 10
        n = n // 10
    return sum

K = int(input('K='))
print(K, ' ziflar kosindisy=>', sumDigits(K))

Жауабы: K=685 → 19; X=9574 → 25; Y=34153 → 16. Қайтарылған мәнді sumDigits(K) + 100 секілді кез келген өрнекте де қолдануға болады.

Есеп (орта): үш санның ең үлкенін табу
def Max(m, k, p):
    max_val = m
    if max_val < k:
        max_val = k
    if max_val < p:
        max_val = p
    return max_val

a = int(input('a='))
b = int(input('b='))
c = int(input('c='))
print('En ulkeni=>', Max(a, b, c))
⚠️
Маңызды ескеру: Python РЕГИСТРГЕ СЕЗІМТАЛ — Max пен max екі БӨЛЕК атау. Егер функцияны Max деп анықтап, оны шақырғанда кіші әріппен max(...) деп жазсаң, сенің жазған функцияң емес, Python-ның ӨЗ дайын max() функциясы шақырылады!
Функция атауы — жай ғана айнымалы

Python-да қызық ерекшелік бар: функция атауы — функцияның адресін қамтитын ЖАЙ ҒАНА айнымалы. Мұны басқа айнымалыға меншіктеп, сол арқылы функцияны БАСҚА АТПЕН шақыруға болады:

def summa(a, b):
    return a + b

F = summa
X = F(5, 12)  # функцияны басқа атпен шақырамыз

Тіпті функция атауын БАСҚА функцияға аргумент ретінде де беруге болады:

def summa(a, b):
    return a + b

def func(f, x, y):
    return f(x, y)

z = func(summa, 10, 3)  # summa-ны аргумент ретінде береміз
📇
Аналогия: функция атауы — телефон нөмірі сияқты. Нөмірді басқа адамға (айнымалыға) беріп, ол сол нөмірмен қоңырау шала алады — дәл сол адамға (функцияға) жетеді, тек басқа «есім» арқылы.
Әдепкі параметр және лямбда-функция

Функция параметрі ӘДЕПКІ (үнсіз келісім бойынша қабылданатын) мәнге ие бола алады — егер шақырғанда сол параметр берілмесе, әдепкі мән қолданылады:

def summa(a, b=4):
    return a + b

X = summa(3)       # b орнына әдепкі 4 қойылады → X=7
Y = summa(35, 28)  # параметр мәні 28-ге тең → Y=63
⚠️
Жиі кездесетін қате: егер параметрде әдепкі мән КӨРСЕТІЛМЕСЕ (мыс. y), ал шақырғанда да ол берілмесе — Python қате (TypeError) шығарады. Мысалы, def func(x, y, z=15) анықтамасында func(48, z=35) деп шақыру ҚАТЕ береді, себебі y-ге ешқандай мән берілмеген.

Соңында — Python-ның ерекше құралы:

Анықтама
Лямбда-функция — атауы алдын ала анықталмай, бір жолда құрылатын шағын функция. Жазылу форматы: lambda аргументтер: нәтиже.
# Лямбда-функцияны тікелей өрнекте қолдану:
z = 1 + (lambda x, y: x * y + pow(x, 2) + pow(y, 2))(1, 3) ** 2

Лямбда-функция көбіне «бір реттік», өте қысқа функция керек болғанда, оған бөлек атау беріп жатпай қолданылады.

🎯 ҰБТ байланысы
Функция мен процедураны ажырату, return-ды дұрыс қолдану — ЕНТ-те жиі кездесетін код-талдау есептері.
1
Функция ӘРҚАШАН нәтиже қайтарады (return арқылы), процедура — керісінше, тек әрекет орындайды.
2
Python регистрге сезімтал — Max пен max екі бөлек атау.
3
Әдепкі мәні жоқ параметрді шақыруда көрсетпей қалдырса — TypeError болады.
Сабақ қорытындысы
  • Функция — процедурадан айырмашылығы, ӘРҚАШАН return арқылы нәтиже қайтарады.
  • Функция атауы — жай ғана айнымалы, оны басқа айнымалыға меншіктеуге немесе аргумент ретінде беруге болады.
  • Параметрге әдепкі мән беруге болады (b=4), бірақ әдепкісіз параметрге міндетті түрде мән беру керек.
  • Лямбда-функция — атаусыз, бір жолдық шағын функция (lambda x, y: ...).