آموزش پایتون

مدیریت فایل

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

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

شما می توانید داده ها را که به عنوان پارامتر شناخته می شوند، به یک تابع منتقل کنید.

در نتیجه یک تابع می تواند داده ها را برگرداند.

ساخت یک تابع

در پایتون یک تابع با استفاده از کلمه کلیدی def تعریف می شود:

مثال

				
					def my_function():
     print("Hello from a function")
				
			

فراخوانی یک تابع

برای فراخوانی یک تابع، از نام تابع بهمراه پرانتز استفاده کنید:

مثال

				
					def my_function():
  print("Hello from a function")

my_function()
				
			

استدلال‌ها (آرگومان ها)

اطلاعات را می توان به عنوان آرگومان به توابع منتقل کرد.

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

مثال زیر تابعی با یک آرگومان (fname) دارد. هنگامی که تابع فراخوانی می شود، یک نام کوچک را به همراه آن می فرستیم که در داخل تابع برای چاپ نام کامل استفاده می شود:

مثال

				
					def my_function(fname):
  print(fname + " Refsnes")

my_function("Emil")
my_function("Tobias")
my_function("Linus")
				
			

آرگومان ها (Arguments) اغلب در آموزش های پایتون به صورت مخفف “args” نوشته می شوند.

پارامترها یا آرگومان ها؟

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

از دیدگاه یک تابع:

یک پارامتر متغیری است که در داخل پرانتز در تعریف تابع لیست شده است.

آرگومان مقداری است که هنگام فراخوانی تابع به آن ارسال می شود.

تعداد آرگومان‌ها

به طور پیش فرض، یک تابع باید با تعداد آرگومان های صحیح فراخوانی شود. به این معنی که اگر برای تابع شما 2 آرگومان تعریف شده است، باید تابع را با 2 آرگومان فراخوانی کنید، نه بیشتر و نه کمتر.

مثال

برای تابع 2 آرگومان تعریف شده  و 2 آرگومان دریافت می کند:
				
					def my_function(fname, lname):
  print(fname + " " + lname)

my_function("Emil", "Refsnes")
				
			
اگر بخواهید تابع را با 1 یا 3 آرگومان فراخوانی کنید، با یک خطا مواجه خواهید شد:

مثال

این تابع در انتظار 2 آرگومان است، اما تنها 1 آرگومان را دریافت می کند:
				
					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 نوشته می شوند.

آرگومان های کلیدواژه‌ای

همچنین می توانید آرگومان ها را با دستور key = value (مقدار آرگومان = نام آرگومان) ارسال کنید.
به این شکل ترتیب آرگومان ها مهم نیست.

مثال

				
					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 را قرار دهید.

مثال

				
					def myfunction():
  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)
				
			

آموزش پایتون

مدیریت فایل