شکل‌دهی به تابع‌ها

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

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

اگر برای پارامتری مقدار پیش‌فرض تعیین می‌کنید، هیچ فاصله‌ای نباید در اطراف علامت تساوی قرار بگیرد:

1
def function_name(parameter_0, parameter_1='default value'):

چنین قراردادی باید هنگام استفاده از نشان‌وندهای کلیدواژه‌ای در فراخوانی تابع هم مورد استفاده قرار گیرد:

1
function_name(value_0, parameter_1='value')

PEP 8 توصیه می‌کند که تعداد کاراکترهای هر خطّ کد را به ۷۹ عدد محدود کنید تا هرکدام از خط‌ها در پنجره‌ای با اندازه‌ی معقول قابل نمایش باشد. اگر مجموعه‌ای از پارامترها باعث می‌شوند که تعریفِ تابع بیش از ۷۹ کاراکتر شود، در تعریفِ تابع و پس از پرانتز باز یک ENTER بزنید. در خطّ بعدی دوبار TAB بزنید تا فهرست نشان‌وندها را از بدنه‌ی تابع، که یک مرحله تورفتگی دارد، جدا کنید.

اکثر ویرایشگرها خط‌های اضافیِ پارامترها را جوری تنظیم می‌کنند که با تورفتگی خطّ اول تناسب داشته باشد:

1
2
3
4
def function_name(
        parameter_0, parameter_1, parameter_2,
        parameter_3, parameter_4, parameter_5):
    function body...

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

تمام عبارت‌های import باید در ابتدای یک فایل نوشته شوند. تنها استثنا این است که شما توضیحاتی در اوّل فایل برنامه بیاورید که کلیّت آن را شرح دهد.

خودآزمایی

۸-۱۵. چاپ کردن مدل‌ها: تابع‌های مثال printing_models.py را در یک فایل جداگانه به نام printing_functions.py قرار دهید. یک عبارت import بالای printing_models.py بنویسید و فایل را طوری تغییر دهید که از تابع‌های واردشده استفاده کند.

۸-۱۶. راه‌های مختلف وارد کردن: از یکی از برنامه‌های خود که یک تابع دارد استفاده و آن تابع را در یک فایل مجزّا ذخیره کنید. تابع را در برنامه‌ی اصلی خود وارد کنید و آن را با هر یک از رویکردهای زیر فراخوانی کنید:

1
2
3
4
5
6
7
8
9
import module_name

from module_name import function_name

from module_name import function_name as fn

import module_name as mn

from module_name import *

۸-۱۷. شکل‌دهی به تابع‌ها: سه برنامه از برنامه‌هایی که در این فصل نوشته‌اید انتخاب کنید و مطمئن شوید که در نوشتن آن‌ها شیوه‌نامه‌ی شکل‌دهی این بخش رعایت شده باشد.

خلاصه

در این فصل یاد گرفتید که چگونه تابع‌ها را بنویسید و نشان‌وندها را به آن‌ها بدهید تا تابع‌ها به اطّلاعاتی که برای کار کردن نیاز دارند، دسترسی داشته باشند. آموختید که چگونه از نشان‌وندهای مکان‌دار و کلیدواژه‌ای استفاده کنید و چگونه تعداد دلخواهی نشان‌وند بپذیرید. تابع‌هایی را که خروجی را نمایش می‌دادند و آن‌هایی را که مقدارهایی را برمی‌گرداندند، دیدید. یاد گرفتید که چگونه تابع‌ها را همراه با لیست‌ها، دیکشنری‌ها، گزاره‌های if و حلقه‌های while استفاده کنید. همچنین آموختید که چگونه تابع‌ها را در فایل‌های جداگانه‌ای به نام ماژول ذخیره کنید تا فایل‌های برنامه‌های شما ساده‌تر و قابل‌فهم‌تر شوند. در نهایت یاد گرفتید که چگونه تابع‌های خود را شکل دهید تا برنامه‌های شما هم‌چنان ساختار مناسبی داشته باشند و خواندن آن‌ها برای شما و دیگران تا جای ممکن ساده باشد.

یکی از هدف‌های شما به عنوان برنامه‌نویس نوشتنِ کد ساده برای انجام کارِ مورد نظرتان است و تابع‌ها به شما برای رسیدن به چنین هدفی کمک می‌کنند. آن‌ها این امکان را فراهم می‌آورند که قطعه‌کدهایی بنویسید و پس از این که فهمیدید کار می‌کنند آن‌ها را کناری بگذارید. زمانی که بفهمید تابعی وظیفه‌ی خود را درست انجام می‌دهد می‌توانید اعتماد کنید که همیشه درست کار خواهد کرد و به وظیفه‌ی برنامه‌نویسی بعدی خود بپردازید.

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

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

تابع‌ها همچنین آزمودن و اشکال‌زدایی کد شما را ساده‌تر می‌کند. وقتی کل کارِ برنامه‌ی شما در قالب تعدادی تابع انجام می‌شود که هر کدام وظیفه‌ی خاصّی دارند، آزمودن و نگهداری کدی که نوشته‌اید بسیار ساده‌تر خواهد بود. می‌توانید برنامه‌ای جداگانه بنویسید که هر تابع را فراخوانی کند و آن را بیازماید تا مشخّص شود که تابع در تمام وضعیّت‌هایی که ممکن است به آن بربخورد کار می‌کند یا نه. زمانی که چنین کنید مطمئن خواهید بود که تابع‌های شما در هر بار فراخوانی به خوبی کار می‌کنند.

در فصل ۹ نوشتنِ کلاس‌ها را می‌آموزید. کلاس‌ها تابع‌ها و داده‌ها را در یک بسته‌بندی منظّم قرار می‌دهند که می‌توانید از آن‌ها به روش‌های منعطف و کارآمدی استفاده کنید.