آموزش گام به گام پایتون - قسمت چهارم

اصل این پست در بلاگ شخصی‌ام منتشر شده

https://mehdy.me/fa/posts/2019/05/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%AF%D8%A7%D9%85-%D8%A8%D9%87-%DA%AF%D8%A7%D9%85-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D9%82%D8%B3%D9%85%D8%AA-%DA%86%D9%87%D8%A7%D8%B1%D9%85/

در قسمت قبل در مورد داده‌ساختارها یاد گرفتیم. تو این قسمت می‌خوایم یاد بگیریم چجوری قسمتی از منطق برنامه رو به صورت مستقل قابل استفاده کنیم. این کار رو به کمک توابع انجام می‌دیم.

تابع

هموجوری که از اسمش پیداست تابع چیزیه که بر اساس ورودی‌هایی که می‌گیره یک سری عملیات رو انجام میده و ممکنه یه سری خروجی هم داشته باشه یا اثرات جانبی داشته باشه (مثلا توی یه فایل چیزی بنویسه). فرض کنید ما یه برنامه می‌خوایم بنویسم که یه سری عدد بهش بدیم و اونایی که عدد اول بودن رو برامون چاپ کنه.

input_text = input(&quotenter numbers: &quot)
for i in input_text.split(' '):
    number = int(i)
    is_prime = True
    for j in range(2, number):
        if number % j == 0:
            is_prime = False
            break
    if is_prime:
        print(number)

این کد همون کاری رو می‌کنه که می‌خوایم. حالا فرض کنید تو برنامه‌ چندیدن جا می‌خوایم چک کنیم که یک عدد اول هست یا نه؟ باید بیایم از وسط این کد اون قسمتی رو که چک می‌کنه عدد اول هست یا نه رو کپی کنیم ببریم اونجا هم استفاده کنیم. مشکلاتی که این کار داره اینه که حجم کد رو الکی زیاد می‌کنه و ممکنه بخوایم الگوریتممون رو عوض کنیم باید بریم همه جا این کار رو بکنیم. پس اگر بیایم اون قسمت از کد رو به صورت یه تابع بنویسیم این مشکلاتمون حل میشه.

def is_prime(number):
    for i in range(2, number):
        if number % i == 2:
            return False
    return True

input_text = input(&quotenter numbers: &quot)
for i in input_text.split(' '):
    number = int(i)
    if is_prime(number):
        print(number)

نه تنها مشکلاتی که داشت رو حل کردیم بلکه کد رو هم تمیزتر کردیم. یعنی خوندن کد راحت‌تر شده.

تو پایتون توابع می‌تونن چندین ورودی و چندین خروجی داشته باشن. برای مثال

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

def min_avg_max(list_of_numbers):
    sum = 0
    min = max = list_of_numbers[0]
    for i in list_of_numbers:
        if i < min:
            min = i
        if i > max:
            max = i
        sum += i
    return min, sum/len(list_of_numbers), max

همچنین میشه برای ورودی‌ها مقدار اولیه تعیین کرد و اگر موقع صدا زدن مقدار اون ورودی داده نشه، مقدار پیش‌فرض استفاده بشه

def greet_user(name, lang='en'):
    if lang == 'en':
        print(f&quothello, {name}&quot)
    elif lang == 'fa':
        print(f&quotسلام، {name}&quot)
    else:
        print(&quotlanguage is not specified&quot)

greet_user(&quotAli&quot) # hello, Ali
greet_user(&quotAli&quot, 'en') # hello, Ali
greet_user(&quotAli&quot, 'fa') # سلام، Ali

در حالت عادی موقع صدا زدن توابع باید مقادیر ورودی رو به همون ترتیبی که تو تعریف تابع اومده به تابع داد. هرچند پایتون این امکان رو میده که مقادیر رو صریحا برای هر ورودی مشخص کنیم بدون توجه به ترتیبشون. برای مثال تابع قبلی رو در نظر بگیرید


 greet_user(name=&quotAli&quot) # hello, Ali 
greet_user(name=&quotAli&quot, lang='en') # hello, Ali 
 greet_user(&quotAli&quot, name='fa') # سلام، Ali
 greet_user(lang='en', name=&quotAli&quot) # hello, Ali 

تا قسمت بعد!