Qanday qilib, nisbatan yuqoriroq darajali funksiyalar yaratish mumkin?
Ikki xil yo`l bor: ichki funksiyalardan yoki chaqiriladigan ob`yektlardan foydalanish. Masalan, ichki funksiyalardan foydalanishni ko`raylik:
def linear(a, b):
def result(x):
return a * x + b
return result
Chaqiriladigan ob`yektdan foydalanish:
class linear:
def __init__(self, a, b):
self.a, self.b = a, b
def __call__(self, x):
return self.a * x + self.b
taxes = linear(0.3, 2)
Ikkala holatda ham,
taxes(10e6) == 0.3 * 10e6 + 2 funksiyani beradi.
Chaqiriladigan ob`yektdan foydalanish nisbatan sekinroq va natijada kod ko`proq bo`ladi. Lekin bir nechta funksiyalar o`z merosiyliklari yordamida signaturalarini bo`lishlari mumkin bo`ladi:
class exponential(linear):
# __init__ meroslanadi
def __call__(self, x):
return self.a * (x ** self.b)
Ob`yekt bir nechta chaqiruvlar uchun ham o`zining holatini saqlab qolishi mumkin:
class counter:
value = 0
def set(self, x):
self.value = x
def up(self):
self.value = self.value + 1
def down(self):
self.value = self.value - 1
count = counter()
inc, dec, reset = count.up, count.down, count.set
Bu yerda inc, dec va resetlar aynan bitta o`zgaruvchini bo`lishayotgan funksiyalar rolida ishlamoqda.
Pythonda ob`yektni qanday qilib nusxalash mumkin?
Umuman olganda copy moduli yordamida.
newdict = olddict.copy()
Ba`zi ob`yektlarni undan ham oddiyroq usulda nusxalash mumkin. Lug`atlar copy metodiga egalar:
new_l = l[:]
Ketma-ketliklar kesimlar yordamida nusxalanishi mumkin:
Dostları ilə paylaş: |