از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
واردات نسبی در مقابل مطلق در پایتون
سرفصلهای مطلب
در حالی که میتوانید پروژههای ساده را در یک فایل قرار دهید، اکثر پروژههای توسعه پایتون به چندین فایل نیاز دارند تا آنها را قابل مدیریت نگه دارد. یعنی شما به راهی نیاز دارید import یک فایل به فایل دیگر با این حال، بسیاری از Pythonistas وارد کردن فایل ها را گیج کننده می دانند. خوشبختانه، اگر تفاوت بین پایتون های مختلف را بدانید، آسان است import بیانیه.
واردات چیست؟
Importing به اجازه دادن به فایل پایتون یا ماژول پایتون برای دسترسی به اسکریپت از فایل یا ماژول پایتون دیگر اشاره دارد. شما فقط می توانید از توابع و ویژگی هایی که برنامه شما به آنها دسترسی دارد استفاده کنید. به عنوان مثال، اگر می خواهید از عملکردهای ریاضی استفاده کنید، باید import اول بسته ریاضی این به این دلیل است که قبل از استفاده از آنها باید هر چیزی را که می خواهید در پایتون استفاده کنید تعریف کنید.
به عنوان مثال، پایتون یک را می دهد NameError
برای کد زیر:
myPi = math.pi
این به این دلیل است که نه math
شی و نه ویژگی ها و روش های آن به صورت بومی برای خود زبان در دسترس هستند. برای استفاده از math
اعتراض کنید، باید import ابتدا آن را
import math
myPi = math.pi
print myPi
را import
بیانیه شی را به محدوده فعلی برنامه شما اضافه می کند.
واردات چگونه کار می کند
را import
اظهارات انجام بسیاری در زیر هود به import فایل یا ماژول ابتدا به دنبال ماژول یا بسته شما می گردند sys.modules
، جایی که پایتون کدهای وارد شده قبلی شما را ذخیره می کند. اگر پایتون نتواند ماژول را در آنجا پیدا کند، سپس از طریق آن جستجو می کند کتابخانه استاندارد پایتون برای این. اگر پایتون هنوز نتواند ماژول را پیدا کند، کل فضای ذخیره سازی شما را طی می کند، از دایرکتوری فعلی و مواردی که در فهرست فهرست شده است. system.path
. اگر ماژول در این مکان ها پیدا شود ماژول را به برنامه شما اضافه می کند و در غیر این صورت یک عدد می دهد ModuleNotFoundError
.
نحو بیانیه واردات
به import یک ماژول به طور مستقیم شما فقط نام ماژول یا بسته را بعد از آن قرار دهید import
کلمه کلیدی. لطفا توجه داشته باشید که این عبارت به حروف کوچک و بزرگ حساس است.
import mymodule
با این حال، پایتون سینتکس پیچیده تری را برای وارد کردن کد ارائه می دهد. این قالب دوم شامل from
کلمه کلیدی نیز
from mypackage import mymodule
در این قالب، شما هر دو را مشخص می کنید ماژول یا کد شما می خواهید همراه با جایی که هست. شما نام کد، ماژول یا بسته فرعی خود را برای آن قرار می دهید mymodule
، و مکان آن برای mypackage
. چنین import بیانیه عالی است اگر فقط بخواهید import برخی از کدهای بسته ذکر شده و نه خود بسته.
حتی می توانید نام ماژول را با قرار دادن عبارت تغییر دهید as
کلمه کلیدی.
import mymodule as oMyFunction
همچنین می توانید از ستاره (*
) به عنوان یک کارت وحشی. بیانیه زیر خواهد بود import هر تابع و ویژگی موجود در math
بسته بندی
from math import *
صرف نظر از نحو، شما همیشه باید توصیه شده را دنبال کنید واردات بهترین شیوه ها.
واردات مطلق
واردات مطلق شامل کل مسیر به اسکریپت شما می شود که با برنامه شروع می شود root پوشه در حالی که باید هر پوشه را با یک نقطه از هم جدا کنید، می توانید تا زمانی که به آن نیاز دارید، آن را داشته باشید.
نمونه هایی از واردات مطلق به شرح زیر است:
from package1.firstmodule import firstmodule
import package1.secondmodule.myfunction
مزایا و معایب واردات مطلق
بر خلاف زبان های دیگر، بیشتر توسعه دهندگان پایتون استفاده از واردات مطلق را به پسرعموهای خود ترجیح می دهند. این به این دلیل است که واردات مطلق به شما نشان می دهد که چه کاری می خواهید انجام دهید. مکان واقعی فایل های شما دقیقاً در کد شما قرار دارد. در واقع می توانید از آنها در هر جایی از کد خود استفاده کنید. آنها فقط کار خواهند کرد.
اگرچه واردات مطلق می تواند بسیار طولانی شود. اگر پروژه شما دارای بسته های فرعی در بسته های فرعی در بسته های فرعی است، شما import عبارات می توانند فراتر از یک خط کد گسترش پیدا کنند. وقتی این اتفاق می افتد، بهتر است به جای آن از واردات نسبی استفاده کنید.
همچنین ممکن است هنگام راه اندازی برنامه خود با استفاده از فایل های راه اندازی مختلف، مشکلی را کشف کنید. مفسر پایتون فقط پوشه فعلی فایل شروع را به عنوان آن اعلام می کند sys.path
بسته بندی root. اگر برنامه خود را فقط با استفاده از فایل های موجود در آن بارگیری کنید، خوب است root پوشه این بخاطر این است که sys.path
در سراسر اسکریپت شما ثابت خواهد ماند.
با این حال، هنگامی که برنامه خود را از یک زیر پوشه یا در هر موقعیت دیگری که در آن شما شروع می کنید، وضعیت تغییر می کند sys.path
ممکن است تغییر کند. سپس، شما “root پوشه” زیر پوشه است. از آنجایی که نمی توانید از واردات ضمنی استفاده کنید (همانطور که در زیر خواهیم دید)، هر فایلی خارج از زیرپوشه برای برنامه شما غیرقابل دسترسی می شود.
شما دو راه حل برای این کار دارید. می توانید اسکریپت زیرپوشه خود را به عنوان یک ماژول وارد شده شروع کنید یا می توانید اضافه کنید sys.path
مستقیما در کد شما
مثلا:
- وارد کردن ماژول ها به عنوان زمان اجرا:
python -m packA.a2
- sys.path را قبل از وارد کردن فایلهای خود اضافه کنید:
import os, sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
from packA.subA import sa2
واردات نسبی
با واردات نسبی، شما فقط محل منابع شما را نسبت به فایل کد فعلی مشخص می کنید. شما می توانید این کار را به صورت ضمنی یا صریح انجام دهید، حتی اگر واردات نسبی ضمنی در پایتون 3 حذف شد.
در مورد نحو، واردات نسبی از آن استفاده می کند علامت نقطه. تک نقطه ها نشان دهنده دایرکتوری اسکریپت فعلی است. دو نقطه نشان دهنده پوشه والد نقطه فشاری به معنای پدربزرگ و مادربزرگ و غیره است. اگر از سیستم عامل یونیکس مانند یا ویندوز استفاده می کنید، ممکن است با این سیستم آشنا باشید console.
نمونه هایی از واردات نسبی به شرح زیر است:
import other
from . import some_class
from .subA import sa1
from .some_module import some_class
import some_function
import subA.sa1
واردات نسبی و مزایا و معایب آن
واردات نسبی به ندرت تا زمانی که واردات مطلق رشد می کند. آنها حتی می توانند یک عبارت مطلق مضحک طولانی را به چیزی به سادگی تبدیل کنند:
from ..my_sub_package.my_module import my_function
با این حال، آنها همچنین مسیرهای ماژول های شما را پنهان می کنند. اگر تنها توسعهدهنده هستید، ممکن است مشکلی نداشته باشد، اما اگر عضوی از یک تیم توسعه باشید که ساختار دایرکتوری واقعی میتواند تغییر کند، به هم میریزد.
از کدام واردات استفاده کنیم؟
مگر اینکه شما کار می کنید روی یک پروژه بزرگ با چندین لایه زیر بسته، همیشه باید از واردات مطلق استفاده کنید. به این ترتیب، هر کسی که به آن نگاه می کند، کد شما را به راحتی درک می کند، از جمله خودتان اگر دوباره به آن مراجعه کنید تا بعداً آن را به روز کنید. حتی اگر مسیرهای طولانی دارید، باز هم باید سعی کنید برنامه خود را بنویسید تا فقط از عبارات مطلق برای ساده کردن کد و زندگی خود استفاده کنید.
نتیجه
مانند هر زبان برنامه نویسی مدرن دیگری، پایتون این امکان را به شما می دهد import کد از فایل ها یا ماژول های دیگر. با این حال، این می تواند به یک گیج کننده و مستعد خطا تبدیل شود process، مگر اینکه مفاهیم پشت آن را درک کنید import سیستم.
در این مقاله به روشهای مختلف وارد کردن کد به برنامههای پایتون، از جمله واردات مطلق و نسبی نگاه کردیم. ما همچنین مزایا و معایب هر کدام را که در موارد استفاده مختلف دارای مزایای خود هستند، مقایسه کردیم.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-24 23:58:04