Функсияҳо
Вақте як амал дар барнома якчанд бор лозим аст, онро ҳамчун функсия ташкил медиҳанд: ба порчаи код ном медиҳанд ва онро аз рӯи ном даъват мекунанд. Функсияҳо кодро кӯтоҳтар ва фаҳмотар мекунанд ва аз нусхабардорӣ халос мекунанд.
Аз функсияҳои дохилӣ ту аллакай истифода мебарӣ: print, len, max, sorted. Акнун навиштани функсияҳои худро меомӯзем.
def ва return
def square(x):
return x * x
print(square(5)) # 25
print(square(3) + 1) # 10
def ном(параметрҳо):— сарлавҳаи функсия;- ҷисм бо отступ навишта мешавад;
return қимат— функсияро тамом мекунад ва натиҷаро ба ҷое, ки аз он даъват шуда буд, бармегардонад.
Вақте Python def-ро мехонад, функсия танҳо муайян мешавад. Он ҳангоми даъват иҷро мешавад — square(5).
Параметрҳо
Параметрҳо метавонанд якчанд бошанд ё умуман набошанд:
def area(w, h):
return w * h
def line():
print("-" * 20)
print(area(3, 4)) # 12
line()
Параметр метавонад қимати пешфарз дошта бошад:
def power(x, n=2):
return x ** n
print(power(5)) # 25
print(power(2, 10)) # 1024
return ва print — як чиз нестанд
print қиматро дар экран нишон медиҳад, return бошад онро ба барнома медиҳад. Натиҷаи функсияи бе return — None аст:
def bad_square(x):
print(x * x) # чоп мекунад, вале барнамегардонад
y = bad_square(4) # дар экран 16
print(y + 1) # хато: None + 1
Қоидаи хуб: функсия ҳисоб мекунад ва бармегардонад, барномаи асосӣ бошад чоп мекунад.
return-ро якчанд бор истифода бурдан мумкин аст — функсия дар аввалини иҷрошуда тамом мешавад:
def sign(x):
if x > 0:
return 1
if x < 0:
return -1
return 0
Якчанд қиматро бо кортеж баргардонидан мумкин аст: return q, r, ва бо кушодан қабул кардан: q, r = divide(17, 5).
Функсияҳо-санҷишҳо
Функсияе, ки True ё False бармегардонад, шартҳоро хонотар мекунад:
def is_even(x):
return x % 2 == 0
def has_seven(x):
while x > 0:
if x % 10 == 7:
return True
x //= 10
return False
count = 0
for x in range(1, 101):
if is_even(x) and has_seven(x):
count += 1
print(count) # 5
Муқоиса кун: бе функсияҳо ҳамаи ин як давраи дароз бо шартҳои дарунӣ мешуд.
Доираи намоёнӣ
Тағйирёбандаҳое, ки дар дохили функсия сохта шудаанд, маҳаллӣ мебошанд: онҳо аз берун намоён нестанд ва тағйирёбандаҳои барномаи асосиро бо ҳамон ном вайрон намекунанд.
total = 100
def f():
total = 1 # ин тағйирёбандаи дигари маҳаллӣ аст
return total
print(f(), total) # 1 100
Тағйирёбандаҳои глобалиро дар дохили функсия хондан мумкин аст, вале ҳама чизи лозимиро тавассути параметрҳо додан беҳтар аст — ҳамин тавр функсияро санҷидан ва аз нав истифода бурдан осонтар аст.
Функсияҳо ҳамчун қимат ва lambda
Функсияро ба функсияи дигар додан мумкин аст. key дар мураттабсозӣ ҳамин тавр кор мекунад — мо медиҳем, ки аз рӯи кадом қоида муқоиса кардан лозим:
def last_digit(x):
return x % 10
nums = [35, 12, 99, 41]
print(sorted(nums, key=last_digit)) # [41, 12, 35, 99]
Барои функсияи кӯтоҳи яксатра lambda ҳаст:
print(sorted(nums, key=lambda x: x % 10)) # ҳамон чиз
lambda x: ифода — функсияи беном аст, ки қимати ифодаро бармегардонад.
Мураттабсозӣ аз рӯи якчанд аломат
Калид метавонад кортеж баргардонад — он гоҳ элементҳо аз рӯи аломати аввал, ҳангоми баробарӣ аз рӯи дуюм ва ҳамин тавр муқоиса мешаванд:
words = ["нок", "гурба", "себ", "анор", "дарахт"]
words.sort(key=lambda w: (len(w), w))
print(words) # ['нок', 'себ', 'анор', 'гурба', 'дарахт']
Аввал аз рӯи дарозӣ, ҳангоми дарозии якхела — аз рӯи алифбо. Барои он ки ягон аломат бо тартиби камшавӣ равад, ба ададҳо минус мегузоранд: key=lambda p: (-p[1], p[0]).
Хулоса
def ном(параметрҳо):функсияро эълон мекунад,returnнатиҷаро бармегардонад;- бе
returnфунксияNoneбармегардонад; дар функсия ҳисоб кун, берун чоп кун; - тағйирёбандаҳо дар дохили функсия маҳаллианд;
- функсияро ҳамчун
keyдодан мумкин аст;lambda x: ...— функсияи кӯтоҳ; - калид-кортеж аз рӯи якчанд аломат мураттаб мекунад, минус дар адад — бо тартиби камшавӣ.