آموزش پایتون- بخش سوم

در بخش دوم آموزش پایتون، در مورد لیستها ، ست ها ، تاپلها، دیکشنری ها و توابع صحبت کردیم. در این نوشته با بحث 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- گیت هاب

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.