تابع یک بلوک از کد است که فقط زمانی اجرا می شود که فراخوانی شود.
شما می توانید داده ها را که به عنوان پارامتر شناخته می شوند، به یک تابع منتقل کنید.
در نتیجه یک تابع می تواند داده ها را برگرداند.
ساخت یک تابع
در پایتون یک تابع با استفاده از کلمه کلیدی def تعریف می شود:
مثال
def my_function():
print("Hello from a function")
فراخوانی یک تابع
برای فراخوانی یک تابع، از نام تابع بهمراه پرانتز استفاده کنید:
استدلالها (آرگومان ها)
اطلاعات را می توان به عنوان آرگومان به توابع منتقل کرد.
آرگومان ها بعد از نام تابع در داخل پرانتز مشخص می شوند. می توانید هر تعداد آرگومان که می خواهید اضافه کنید، فقط آنها را با کاما جدا کنید.
مثال زیر تابعی با یک آرگومان (fname) دارد. هنگامی که تابع فراخوانی می شود، یک نام کوچک را به همراه آن می فرستیم که در داخل تابع برای چاپ نام کامل استفاده می شود:
مثال
def my_function(fname):
print(fname + " Refsnes")
my_function("Emil")
my_function("Tobias")
my_function("Linus")
آرگومان ها (Arguments) اغلب در آموزش های پایتون به صورت مخفف “args” نوشته می شوند.
پارامترها یا آرگومان ها؟
از دیدگاه یک تابع:
یک پارامتر متغیری است که در داخل پرانتز در تعریف تابع لیست شده است.
آرگومان مقداری است که هنگام فراخوانی تابع به آن ارسال می شود.
تعداد آرگومانها
مثال
def my_function(fname, lname):
print(fname + " " + lname)
my_function("Emil", "Refsnes")
مثال
def my_function(fname, lname):
print(fname + " " + lname)
my_function("Emil")
آرگومان های دلخواه، *args
مثال
def my_function(*kids):
print("The youngest child is " + kids[2])
my_function("Emil", "Tobias", "Linus")
آرگومان های دلخواه اغلب در آموزش ها به اختصار *args
نوشته می شوند.
آرگومان های کلیدواژهای
مثال
def my_function(child3, child2, child1):
print("The youngest child is " + child3)
my_function(child1 = "Emil", child2 = "Tobias", child3 = "Linus")
آرگومان های کلید واژه ای (Keyword Arguments) اغلب در آموزش های پایتون به اختصار kwargs نوشته می شود.
آرگومان های کلیدواژهای دلخواه, **kwargs
اگر نمی دانید چند آرگومان کلمه کلیدواژهای به تابع شما ارسال می شود، دو ستاره قبل از نام پارامتر در تعریف تابع اضافه کنید:
به این ترتیب تابع یک دیکشنری از آرگومان ها را دریافت می کند و به این شکل می تواند به موارد دسترسی داشته باشد:
مثال
def my_function(**kid):
print("His last name is " + kid["lname"])
my_function(fname = "Tobias", lname = "Refsnes")
آرگومان های کلید واژهای دلخواه (Arbitrary Keyword Arguments) اغلب در آموزش های پایتون به اختصار **kwargs
نوشته می شوند.
مقدار پارامتر پیش فرض
مثال زیر نحوه استفاده از مقدار پارامتر پیش فرض را نشان می دهد.
اگر تابع را بدون آرگومان فراخوانی کنیم، از مقدار پیش فرض استفاده می کند:
مثال
def my_function(country = "Norway"):
print("I am from " + country)
my_function("Sweden")
my_function("India")
my_function()
my_function("Brazil")
استفاده از یک لیست به عنوان یک آرگومان
شما می توانید هر نوع داده ای را به عنوان آرگومان به یک تابع ارسال کنید (رشته، عدد، لیست، دیکشنری و غیره)، و به عنوان همان نوع داده در داخل تابع در نظر گرفته می شود.
به عنوان مثال، اگر لیستی را به عنوان آرگومان ارسال کنید، زمانی که به تابع برسد، همچنان یک لیست خواهد بود:
مثال
def my_function(food):
for x in food:
print(x)
fruits = ["apple", "banana", "cherry"]
my_function(fruits)
مقدار های بازگشتی
برای اینکه یک تابع مقداری را برگرداند، از عبارت return استفاده کنید:
مثال
def my_function(x):
return 5 * x
print(my_function(3))
print(my_function(5))
print(my_function(9))
عبارت pass
تعاریف تابع نمی تواند خالی باشد، اما اگر به دلایلی یک تابع بدون محتوا نیاز دارید، برای جلوگیری از دریافت خطا، عبارت pass را قرار دهید.
تابع بازگشتی (Recursion)
پایتون همچنین بازگشت تابع را می پذیرد، به این معنی که یک تابع تعریف شده می تواند خود را فراخوانی کند.
بازگشت (Recursion) یک مفهوم رایج ریاضی و برنامه نویسی است. یعنی یک تابع خودش را فراخوانی می کند. این مزیت این است که می توانید داده ها را برای رسیدن به نتیجه حلقه بزنید.
توسعهدهنده باید در مورد بازگشت تابع بسیار مراقب باشد، زیرا میتواند با یک اشتباه تابعی بنویسدکه هرگز پایان نمییابد، یا تابعی که از مقادیر اضافی حافظه یا قدرت پردازنده استفاده میکند. با این حال، زمانی که به درستی نوشته شود، بازگشت می تواند یک رویکرد بسیار کارآمد و از نظر ریاضی ظریف برای برنامه نویسی باشد.
در این مثال، tri_recursion()
تابعی است که ما تعریف کردهایم تا خود را فراخوانی کند (“recurse” یا بازگشتی). ما از متغیر k به عنوان داده استفاده می کنیم که هر بار که تکرار می کنیم (1-) کاهش می یابد. بازگشت زمانی به پایان می رسد که شرط از 0 بیشتر نباشد (یعنی زمانی که 0 باشد).
برای یک توسعهدهنده جدید میتواند مدتی طول بکشد تا بفهمد این مثال دقیقا چگونه کار میکند، بهترین راه برای فهمیدن این است که آن را آزمایش و اصلاح کنید.
مثال
def tri_recursion(k):
if(k > 0):
result = k + tri_recursion(k - 1)
print(result)
else:
result = 0
return result
print("\n\nRecursion Example Results")
tri_recursion(6)