در بخش دوم آموزش پایتون، در مورد لیستها ، ست ها ، تاپلها، دیکشنری ها و توابع صحبت کردیم. در این نوشته با بحث lambda function ادامه می دهیم:
Lambda Functions
نکته: اگر نام کامل تابعی را فراموش کرده باشیم، کافی است حرف اول آن را بزنیم و کلید tab را بزنیم تا تمام توابع ممکن که با آن حرف آغاز میشود، نمایش داده شود.
نکته:
اگر تابعی به نام power_3 داشته باشیم ، میتوانیم آن را به متغیر دیگر نسبت دهیم. (این یعنی شی گرا)
def sqr(a):
return a**2
b = sqr
توابع لامبدا lambda :
این توابع مانند توابع معمولی هستند با این تفاوت که اسم ندارند و در یک خط قابل تعریف اند. علت استفاده از این توابع عبارتند از:
- سهولت
- سرعت بالاتر
- عدم نیاز به نام
- کاربرد فراوان برای عملکردهای یکبار مصرف
p = lambda x:x**2
p(3)
l = lambda s:s.lower()
l('ABC')
تفاوت تابع و لامبدا:
از لامبدا میشود بلافاصله استفاده نمود اما از تابع نمیتوان.
(lambda a,b: pow(a, b))(2,3)
ANS=8
(def power(a,b): return pow(a,b))(2,3)
ans = error
استفاده از لامبدا در filter , Map
برای مثال جدا کردن (فیلتر کردن) اعداد زوج از یک لیست:
my_list = [1, 5, 4, 6, 8, 11, 3, 12]
even_list = list(filter(lambda x:(x%2==0), my_list))
even_list
برای داشتن خروجی به صورت لیست کافی است از دستور list استفاده کنیم.
استفاده از Map :
یعنی نگاشتT نگاشت کردن، یک ویژگی را عمومیت دادن. برای مثال اگر بخواهیم تمام اعضای یک لیست را بتوان دو برسانیم:
my_list = [1, 5, 4, 6, 8, 11, 3, 12]
my_list **2
result=error
power_2_list = list(map(lambda x:x**2 , my_list))
power_2_list
result:
[1, 25, 16, 36, 64, 121, 9, 144]
مثال دیگر از map کردن:
strings = ['abc', 'def', 'Mohammad']
upper_strings = list(map(lambda s:s.upper(), strings))
upper_strings
مدیریت استثنا یا Exception Handling
زمانی که یکی از حالات پیش بینی نشده پیش بیاید و امکان بروز خطا و در نتیجه متوقف شدن برنامه داشته باشد. برای مثال زمانی که مخرج کسر به طور ناخواسته صفر شود.
def divided_by(lis, a):
return [i/a for i in lis]
divided_by([1,2,3,4], 2)
result:
[0.5, 1.0, 1.5, 2.0]
divided_by([1,2,3,4], 0)
result: error
در چنین حالاتی میتوان یک پیام به یوزر نمایش داد:
try:
a = divided_by([1,2,3,4], 0)
except:
print('An Error occured')
print('Next line')
زمانی که چندین نوع خطا داشته باشیم یا بخواهیم پیام متناسب با خطای خاصی را نمایش دهیم:
def divided_by_2(lis, a):
try:
return [i/a for i in lis]
except ZeroDivisionError as e:
print('An error occured: {}'.format(e))
except:
print('An error occured!')
زمانی که بخواهیم مدیریت منابع داشته باشیم و یا garbage collection را رعایت کرده باشیم از عبارت finally استفاده میکنیم. چه استثنا رخ بدهد و چه ندهد finally اجرا خواهد شد:
def divided_by_2(lis, a):
try:
return [i/a for i in lis]
except ZeroDivisionError as e:
print('An error occured: {}'.format(e))
finally:
print('All done')
a = divided_by_2([1,2,3,4], 2)
print('Next line')
شی گرایی در پایتون:

سایر آموزش ها:
1- آموزش پایتون بخش اول
2- آموزش پایتون بخش دوم
منابع:
1- گیت هاب