بازنویسی کد
استفاده مجدد از کد، یکی از اصول مهم برنامهنویسی در هر زبان است. افزایش حجم کد، هم تغییر آن را دشوار میکند و هم یافتن خطاها را سختتر. برای پروژههای بزرگ، رعایت اصولی که به خلاصهسازی و دسترسی آسانتر به اجزای مختلف برنامه کمک میکنند، ضروری است. از جمله این اصول، اجتناب از تکرار کد یا همان اصل DRY (Don't Repeat Yourself) است. یکی از روشهای پرهیز از تکرار را قبلاً با استفاده از حلقهها بررسی کردیم. در این بخش، با دو ابزار مهم دیگر آشنا میشویم: توابع و ماژولها. توجه: تکرار کد معمولاً با اصل WET تطابق دارد که مخفف «Write Everything Twice» یا «ما از تایپ کردن لذت میبریم» است. شما پیشتر با توابع آشنا شدهاید. هر عبارتی که یک نام بهدنبال پرانتز داشته باشد، فراخوانی تابع است. مانند نمونههای زیر:
print("Hello world!")
range(2, 20)
str(12)
range(10, 20, 3)
نکته: عباراتی که قبل از پرانتز قرار دارند، نام تابع هستند و مقادیر داخل پرانتز، آرگومانهای تابع بهشمار میروند.
تعریف تابع
علاوه بر استفاده از توابع آماده، میتوان با استفاده از دستور def
توابع دلخواه تعریف کرد. مثال زیر تابعی به نام my_func
را نشان میدهد که هیچ آرگومانی نمیگیرد و فقط سه بار کلمهای را چاپ میکند. تابع ابتدا تعریف شده و سپس فراخوانی میشود. کد داخل تابع فقط هنگام فراخوانی اجرا میشود.
def my_func():
print("spam")
print("spam")
print("spam")
my_func()
خروجی:
>>>
spam
spam
spam
>>>
نکته: بلوک تابع با علامت :
آغاز شده و با تورفتگی مشخص میشود. توابع باید قبل از فراخوانی، تعریف شوند، همانطور که متغیرها باید قبل از استفاده مقداردهی شوند.
>>> hello()
def hello():
print("Hello world!")
خروجی:
>>>
NameError: name 'hello' is not defined
>>>
آرگومانها در توابع
توابع میتوانند آرگومان دریافت کنند. تا اینجا توابع بدون آرگومان را دیدهایم. اما معمولاً توابع با دریافت ورودی کار میکنند. مثال زیر تابعی را نشان میدهد که یک آرگومان میگیرد:
def print_with_exclamation(word):
print(word + "!")
print_with_exclamation("spam")
print_with_exclamation("eggs")
print_with_exclamation("python")
خروجی:
>>>
spam!
eggs!
python!
>>>
نکته: آرگومانها داخل پرانتز قرار میگیرند. میتوان بیش از یک آرگومان هم تعریف کرد، که با کاما از هم جدا میشوند.
def print_sum_twice(x, y):
print(x + y)
print(x + y)
print_sum_twice(5, 8)
خروجی:
>>>
13
13
>>>
آرگومانها مثل متغیرهایی درون تابع عمل میکنند، اما بیرون از تابع قابل دسترسی نیستند. همین موضوع برای سایر متغیرهای تعریفشده داخل تابع نیز صادق است.
def function(variable):
variable += 1
print(variable)
function(7)
print(variable)
خروجی:
>>>
8
NameError: name 'variable' is not defined
>>>
نکته: بهطور فنی، متغیرهایی که در تعریف تابع استفاده میشوند، پارامتر نام دارند و هنگام فراخوانی، مقادیری که به آنها داده میشود آرگومان نامیده میشوند.
استفاده از return برای بازگرداندن مقدار
برخی توابع، خروجیهایی مانند عدد یا رشته را برمیگردانند تا بعداً استفاده شوند. این کار با استفاده از return
انجام میشود. مثال:
def max(x, y):
if x >= y:
return x
else:
return y
print(max(4, 7))
z = max(8, 5)
print(z)
خروجی:
>>>
7
8
>>>
نکته: از return
فقط در داخل تابع میتوان استفاده کرد. وقتی تابع به return
برسد، بلافاصله اجرای آن متوقف میشود و کدهای بعد از آن اجرا نمیشوند.
def add_numbers(x, y):
total = x + y
return total
print("This won't be printed")
print(add_numbers(4, 5))
خروجی:
>>>
9
>>>