تابع در پایتون

تابع در پایتون

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

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

برای نوشتن تابع باید با کلمه def شروع کنیم و بعد از آن یک نام برای تابع انتخاب کنیم، بعد از آن پرانتز باز و بسته میشود که میتوانیم مقادیر ورودی و خروجی تابع را در آن مشخص کنیم. بعد از گذاشتن یک دو نقطه ( : ) به سراغ بدنه تابع میرویم.

قصد داریم تابعی بنویسیم به نام zarb که هربار آن را صدا کردیم یک عدد بعنوان ورودی از کاربر گرفته و آن را ضرب در ۷ کند و در آخر چاپ کند:

def zarb ():
    n = int(input())
    print(n*7)

اگر برنامه را اجرا کنیم هیچ اتفاقی نمی افتد زیرا توابع تا صدا زده نشوند اجرا نمیشوند. با نوشتن اسم تابع و باز و بسته کردن پرانتز در واقع یک تابع را صدا زده ایم:

def zarb ():
    n = int(input())
    print(n*7)

zarb()
zarb()
# ۵
  ۳۵
  ۸
  ۵۶

ورودی و خروجی توابع

در این بخش میخواهیم درمورد ورودی ها و خروجی های تابع صحبت کنیم. گفتیم که در پرانتزی که در تعریف تابع می آید میتوانیم ورودی های یک تابع را مشخص کنیم. میخواهیم تابع ضربی را که در بخش قبل دادیم به شکلی تغییر دهیم که بتوانیم یک عدد را به آن پاس بدهیم، آن را ضرب در ۷ کنیم و نتیجه را چاپ کنیم:

def zarb (n):
    print(n*7)

zarb(3)
# ۲۱

در پرانتز یک متغیر با نام دلخواه تعریف کرده ایم که این متغیر فقط در بدنه همین تابع شناخته میشود. وقتی در ادامه برنامه عدد ۳ را به تابع پاس داده ایم، این عدد جای n نشسته و در ۷ ضرب میشود.

من میتوانم بیشتر از یک ورودی از کاربر بگیرم، کلفیست در پرانتز نام چند متغیر را بیاورم و آن ها را با کاما از هم جدا کنم. برنامه را طوری تغییر میدهیم که از کاربر دو ورودی گرفته و آن ها را ضرب در هم کند و نتیجه را چاپ کند.

def zarb (x, y):
    print(x * y)

zarb(3, 4)
# ۱۲
zarb(5, 3)
# ۱۵
zarb(6, 4)
# ۲۴

درمورد توابع دستوری داریم به نام return این دستور، تابع را تمام میکند، از تابع خارج میشود و یک مقدار را برمیگرداند. حالت استاندارد این است که به جای اینکه نتیجه را درون تابع پرینت کنیم، آن را return کنیم و خارج از تابع چاپ کنیم:

def zarb (x, y):
    return x * y

print(zarb(3, 4))
# ۱۲

همچنین میتوانیم تابع را صدا بزنیم و نتیجه را در یک متغیر بریزیم:

def zarb (x, y):
    return x * y

res = zarb(3, 4)

در تابع میتوانیم بیش از یک مقدار را به صورت تاپل برگردانیم و همچنین میتوانیم چند مقدار را در یک خط درون چند متغیر مختلف بریزیم:

def zarb (x, y):
    return (x*y, x+y, x)

zarb, jam, x = zarb(3, 4)

میبینید که در خط آخر چگونه این کار را انجام داده ایم.

ورودی های اجباری و اختیاری

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

def function (x, y=7):
    print(x,y)

function(2)
# ۲ ۷

زمانی که تابع function را تعریف کردیم، در قسمت ورودی ها به متغیر y مقدار پیشفرض ۷ را داده ایم. هنگامی که میخواهیم این تابع را فراخوانی کنیم اگر به y مقداری نسبت ندهیم، متغیر y به صورت پیشفرض عدد ۷ میباشد.

در بسیاری از مواقع لازم است تعداد زیادی از داده را به یه تابع پاس بدهیم ولی نمیدانیم که دقیقا چند تا! در این مواقع از تاپل کمک میگیریم. به این صورت که در هنگام تعریف یک تابع، قبل از نوشتن نام آخرین متغیر ورودی، یک ستاره میگذاریم. این کار باعث میشود که آن متغیر از نوع تاپل بوده و تعداد بی شماری از تابع را در خود ذخیره کند. به مثال زیر توجه کنید:

def function (a, *tpl):
    print(a)
    for i in tpl:
        print(i)

حالا میتوانیم هر چند تا ورودی که میخواهیم به تابع function پاس بدهیم. پس به صورت زیر عمل میکند:

function(3,"hi",2.12,True,6,7,8,9,0)
# ۳
# hi
# ۲٫۱۲
# True
# ۶
# ۷
# ۸
# ۹
# ۰

در جلسه بعد درمورد تابع lambda و map صحبت خواهیم کرد.

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


Warning: file_put_contents(): Only -1 of 81 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 659 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 137870 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 242 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 116108 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 292 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 10982 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 25669 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 739 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 8901 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 2413 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 129 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 59046 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 350 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 1058 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 57 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 2279 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 267177 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 160457 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 11343 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 4186 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 153101 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 5676 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 21911 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 54819 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 1391 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 451276 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 508 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 5860 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 1558916 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 60262 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 26702 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 6435 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 1051 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 58071 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 983 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 975 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 611 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 237 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 14002 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 214 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 77 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 3382 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 13578 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 9638 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 292 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 4037 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 1722 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 180 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 3926 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Warning: file_put_contents(): Only -1 of 15074 bytes written, possibly out of free disk space in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177

Fatal error: Uncaught ErrorException: file_put_contents(): write of 8192 bytes failed with errno=122 Disk quota exceeded in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php:177 Stack trace: #0 [internal function]: litespeed_exception_handler(8, 'file_put_conten...', '/home/farkia/do...', 177, Array) #1 /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php(177): file_put_contents('/home/farkia/do...', '<!DOCTYPE html>...', 8) #2 /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/optimizer.cls.php(135): LiteSpeed\File::save('/home/farkia/do...', '<!DOCTYPE html>...', true, true) #3 /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/optimize.cls.php(842): LiteSpeed\Optimizer->serve('https://farkian...', 'js', true, Array) #4 /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/optimize.cls.php(392): LiteSpeed\Optimize->_ in /home/farkia/domains/farkiantech.com/public_html/wp-content/plugins/litespeed-cache/src/file.cls.php on line 177