ذخیره کردن تابعها در ماژولها
یکی از سودمندیهای تابعها این است که بخشهای مختلف کد را از برنامهی اصلی شما جدا میکند. با انتخاب نامهای گویا برای تابعهای خود، دنبال کردن برنامهی اصلی شما بسیار سادهتر خواهد بود. میتوانید یک گام فراتر بروید و تابعهای خود را در فایلی جداگانه به نام ماژول ذخیره و سپس آن ماژول را در برنامهی اصلی خود وارد کنید. عبارت import از پایتون میخواهد که کد موجود در ماژول را در فایل برنامهای که اکنون در حال اجراست، در اختیار قرار دهد.
ذخیرهسازی تابعها در یک فایل جداگانه این امکان را فراهم میآورد که جزئیاتِ برنامهی خود را پنهان و بر روی منطقِ سطحِ بالاتر آن تمرکز کنید. این کار همچنین باعث میشود که بتوانید توابع را در برنامههای مختلف دوباره به کارببرید. زمانی که تابعها را در فایلهای جداگانه ذخیره میکنید، میتوانید آنها را با برنامهنویسان دیگر به اشتراک بگذارید بدون این که برنامهی اصلی در اختیارشان قرار بگیرد. همچنین دانستنِ نحوهی وارد کردن تابعها، به شما اجازه میدهد که از کتابخانههای توابع برنامهنویسانِ دیگر در برنامهی خود استفاده کنید.
چندین راه برای وارد کردن یک ماژول وجود دارد که هر کدام از آنها به طور مختصر معرّفی میشود.
وارد کردن یک ماژول کامل
برای آغاز وارد کردن تابعها، نیاز دارید ابتدا یک ماژول بسازید. یک ماژول فایلی با پسوند .py است و کدی را شامل میشود که میخواهید به برنامهی خود وارد کنید. اکنون ماژولی میسازیم که حاوی تابع make_pizza() است. برای ساختن این ماژول همهچیز را به جز این تابع، از فایل pizza.py حذف میکنیم:
حال فایلی جداگانه به نام making_pizza.py در همان جایی که pizza.py را ذخیره کردهایم میسازیم. این فایل ماژولی را که اکنون ساختهایم وارد کرده و تابع make_pizza() را دوبار فراخوانی میکند.
زمانی که پایتون این فایل را میخواند، خط import pizza به آن میگوید که فایل pizza.py را باز کن و تمام تابعهای داخل آن را در این برنامه کپی کن. شما در واقع کد کپیشده بین فایلها را نمیبینید زیرا پایتون این کار را درست پیش از اجرای برنامهی شما، پشت صحنه انجام میدهد. همهی چیزی که باید بدانید این است که تمام تابعهایی که در pizza.py تعریف شده، اکنون در making_pizzas.py در دسترس است.
برای فراخوانی تابعی از یک ماژولِ واردشده، نام ماژول را، در اینجا pizza، و پس از آن نام تابع را، در اینجا make_pizza() بنویسید و بین این دو یک نقطه قرار دهید (۱). خروجی این کد و برنامهی اصلی که ماژولی را وارد نمیکرد، یکسان است:
اوّلین رویکرد برای وارد کردن، که در آن به سادگی دستور import و نام ماژول را پس از آن مینویسید، تمام تابعهای موجود در ماژول در برنامهی شما در اختیار قرار میدهد. اگر این نوع import برای وارد کردن کامل یک ماژول به نام module_name.py استفاده کنید، هر تابع این ماژول از طریق دستور زیر در دسترس است:
|
|
وارد کردن تابعهای مشخّص
در عین حال میتوانید تنها تابع خاصّی را از یک ماژول وارد کنید. این دستورِ کلی برای چنین رویکردی است:
|
|
میتوانید هر تعداد تابع را که خواستید از یک ماژول وارد کنید. برای این کار نام هر تابع را با یک کاما جدا کنید:
|
|
اگر بخواهید تنها تابعی را که مورد نیاز است وارد کنیم، مثال making_pizzas.py به شکل زیر درمیآید:
با این دستور دیگر نیازی به استفاده از نقطه برای فراخوانی تابع ندارید. میتوانیم هنگام استفاده از تابع آن را با نام فراخوانی کنیم، زیرا تابع make_pizza() را به طور صریح در عبارت import وارد کردهایم.
استفاده از as برای تعیین نام مستعار 78
برای تابع
اگر نام تابعی که وارد میکنید با نام تابعی که در برنامهی شما وجود دارد تداخل داشته باشد، یا نام آن تابع خیلی طولانی باشد، میتوانید از یک نام مستعار کوتاه و یکتا استفاده کنید — نامی جایگزین که مشابه نام خودمانی برای یک تابع است. این نام مستعار را هنگام وارد کردن تابع به آن اطلاق میکنیم.
در اینجا با وارد کردنِ ماژول به صورت make_pizza as mp، به تابع make_pizza() نام مستعار mp() میدهیم. کلیدواژهی as نام تابع را به نام مستعاری که تعیین کردهاید تغییر میدهد:
عبارت import که اینجا نمایش داده شده نام تابع make_pizza() را در این برنامه به mp() تغییر میدهد. هر زمان که بخواهید میتوانید برای فراخوانی به جای make_pizza() از mp() استفاده کنید و پایتون کد make_pizza() را اجرا خواهد کرد بدون این که با تابع make_pizza() دیگری که احتمالاً در برنامهی خود تعریف کردهاید، هیچ گونه تداخلی به وجود بیاید.
دستور عمومی برای ارائه کردن نام مستعار به این صورت است:
|
|
استفاده از as برای تعیین نام مستعار برای یک ماژول
شما همچنین میتوانید برای یک ماژول نام مستعار بگذارید. تعیین یک نام مستعار کوتاه، مانند p به جای pizza، باعث میشود که فراخوانی تابعهای آن ماژول سریعتر انجام گیرد. فراخوانی p.make_pizza() بسیار خلاصهتر از pizza.make_pizza() است:
در عبارت import به ماژول pizza نام مستعار p دادهایم، امّا تابعهای ماژول نامهای اصلی خود را حفظ میکنند. فراخواندن تابعها با نوشتن p.make_pizza() به جای pizza.make_pizza() نه تنها مختصرتر است بلکه توجّه شما از نام ماژول برمیگرداند و امکان میدهد که روی نامهای گویای تابعهای آن تمرکز کنید. نام این تابعها به وضوح به شما میگویند که این تابع چه میکند و بهکارگیری آنها نسبت به بهکارگیری نام کامل ماژول، برای خوانایی برنامهی شما اهمّیّت بیشتری دارند.
دستور کلّی برای این رویکرد این است:
|
|
وارد کردن تمام تابعهای یک ماژول
با استفاده از عملگر ستاره (*) میتوانید از پایتون بخواهید که تمام تابعهای یک ماژول را وارد کند:
ستاره در عبارت import به پایتون میگوید که تمام تابعهای ماژول را در فایل برنامه کپی کن. چون تمام تابعها وارد شدهاند، میتوانید آنها را تنها با نام و بدون علامت نقطه استفاده کنید. با این حال بهتر آن است زمانیکه با ماژولهای بزرگتری که خود آنها را ننوشتهاید کار میکنید چنین کاری نکنید: اگر ماژول تابعی داشته باشد که با نامی در پروژهی شما یکسان باشد، ممکن است به نتایج غیرمنتظرهای برسید. پایتون ممکن است تابعها یا متغیّرهای مختلفی را با نام یکسان ببیند و به جای وارد کردن جداگانهی تابعها، آنها را رونویسی کند.
بهترین رویکرد این است که تنها تابع یا توابعی را که میخواهید وارد کنید یا تمام ماژول را وارد کرده و از علامت نقطه استفاده کنید. این کار به کدی واضح منجر میشود که خواندن و درک کردن آن ساده است. این بخش از این جهت در اینجا آمده تا اگر به عبارتهای import مانند این در کد دیگران برخوردید، بتوانید آن را تشخیص دهید:
|
|