رشن | خدمات میزبانی وب

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

تابع چیست؟

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

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

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

در واقع در توابع، برنامه‌نویسی راحت‌تر می‌شود که یک بار یک تابع می‌نویسیم و بعد هرکجا خواستیم صدایش می‌زنیم.

سینتکس ایجاد تابع در پایتون به این صورت است که با کلیدواژه def آن را معرفی می‌کنیم.

Python
def my_function():
my_code

برای معرفی توابع یا فراخوانی آن‌ها حتما باید پرانتز باز و بسته بعد اسمش بیاوریم.

همان حلقه while را در نظر بگیرید.

Python
count = 0
while count < 10:
print(count)
count += 1

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

به این صورت این حلقه را وارد تابع می‌کنیم:

Code
def count_function():
count = 0
while count < 10:
print(count)
count += 1

و حالا برای این‌که این تابع را صدا بزنیم به این فرمت در هر کجا که خواستیم صدایش می‌زنیم:

Python
count_function()

و تکه کد ما اجرا می‌شود.

آرگومان (argument) چیست؟

آرگومان یا argument، اطلاعات و دیتایی است که داخل پرانتز جلوی نام تابع وارد می‌شود.

حتی می‌توانیم یک تابع یا فانکشن را کمی پیشرفته‌تر کنیم و آرگومان یا argument به تابع بدهیم. با این کار، تابع ما کمی پویاتر و پیشرفته‌تر می‌شود.

سینتکس یک تابع با آرگومان و صدا زدن آن به این صورت می‌باشد:

Python
def func_name(argument):
some_code
func_name(parameter)

مثال زیر را در نظر بگیرید:

Python
def func_name(name):
print(f'Hello {name}, how are you?')

پارامتر (parameter) چیست؟

پارامتر

حالا ما آرگومانی به نام name در تابع خود داریم که هر موقع که داریم تابع را صدا می‌زنیم باید پارامتر (parameter) بدهیم.

صدا زدن یک تابع که آرگومان دارد و پارامتر می‌گیرد به این صورت می‌باشد:

Python
func_name('Saeed')

و خروجی نیز به این صورت می‌باشد:

Code
Hello Saeed, how are you?

تفاوت پارامتر و آرگومان چیست؟

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

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

تعداد آرگومان در یک تابع

شما محدودیتی در قرار دادن تعداد آرگومان در یک تابع ندارید، اما موقعی که دارید پارامتری را وارد می‌کنید باید پارامترها به همان تعداد آرگومان‌ها باشد.

مثلا اگر تابع شما دو آرگومان دارد باید دو پارامتر بگیرد، و اگر کمتر یا بیشتر باشد خطا می‌گیرید. آرگومان‌ها و پارامترها با کاراکتر کاما (,) از یکدیگر جدا می‌شوند.

Python
def func1(arg1, arg2)
some_code
func1(param1, param2)

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

Python
def func1(arg1, arg2):
print(arg1)
func1('hi')

متن خطا:

Code
Traceback (most recent call last):
File "/var/www/html/new.py", line 5, in <module>
func1('hi')
TypeError: func1() missing 1 required positional argument: 'arg2'

همان‌طور که در خط آخر می‌بینید مفسر به صورت واضح بیان می‌کند که یک آرگومان کم دارد.

حالا اگر تابع را با پارامتر بیشتر صدا بزنیم این خطا را بر می‌گرداند:

Code
Traceback (most recent call last):
File "/var/www/html/new.py", line 5, in <module>
func1('hi', 'bye', 'ok')
TypeError: func1() takes 2 positional arguments but 3 were given

آرگومان‌های arbitrary یا اختیاری (*args)

گاهی اوقات ممکن است بخواهیم یک آرگومان به تابع بدهیم اما ندانیم که چند پارامتر قرار هست تابع دریافت کند. برای همین یک * قبل آرگومان می‌گذاریم و به پایتون می‌گوییم که هر تعداد ورودی را قبول کند.

این مثال را در نظر بگیرید:

Python
def name(*names):
return names
name('Saeed', 'Ali', 'Ahmad')

خروجی:

Code
('Saeed', 'Ali', 'Ahmad')

نکته مهم: نکته‌ای که این‌جا حائز اهمیت می‌باشد این است که پارامترهایی که به به این صورت داده می‌شوند، به صورت پیش‌فرض یک تاپل (tuple) هستند و می‌توانید به ایندکس خاصی دسترسی پیدا کنید و یا حتی این تاپل را به لیست تبدیل کنید.

Python
def name(*names):
print(names[0])
name('Saeed', 'Ali', 'Ahmad')

خروجی:

Code
Saeed

مقداردهی پیش‌فرض پارامتر

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

مثال زیر را در نظر بگیرید:

Python
def country(name='Iran'):
print(f'The country name is {name}')
country()
country('USA')

خروجی:

Code
The country name is Iran
The country name is USA

استفاده از یک متغیر دیگر به عنوان پارامتر تابع

در هنگام مقداردهی به پارامتر حتی می‌توانید نام یک متغیر دیگر را داخل پرانتز وارد کنید. مثال زیر را در نظر بگیرید:

Python
def countries(names):
for name in names:
print(name)
country_names = ['Iran', 'USA', 'Germany', 'UK']
countries(country_names)

خروجی:

Code
Iran
USA
Germany
UK

عبارت pass یا pass statement

عبارت یا لغت کلیدی pass جزو کلیدواژه‌های رزرو شده در پایتون می‌باشد و به این معناست که هرکجا مفسر پایتون این لغت را دید آن کد یا بلوک را اجرا نمی‌کند و برنامه را ادامه می‌دهد.

همان‌طور که می‌دانید هیچ تابعی نمی‌تواند مقدار خالی داشته باشد. حالا برای این‌که تابع زیر نخواهیم مقدار خاصی برگرداند عبارت pass را وارد می‌کنیم.

Python
def countries(names=''):
if names == 'USA':
pass
else:
print('Iran')
countries()
countries('USA')

خروجی:

Code
Iran

نظرات