از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
ایجاد و وارد کردن ماژول ها در پایتون
سرفصلهای مطلب
معرفی
در پایتون، یک ماژول یک فایل مستقل با عبارات و تعاریف پایتون است. مثلا، file.py
، را می توان یک ماژول به نام در نظر گرفت file
. این با بسته ای متفاوت است که یک بسته a است مجموعه ماژول ها در دایرکتوری ها که ساختار و سلسله مراتب را به ماژول ها می دهند.
ماژولها به ما کمک میکنند برنامههای بزرگ را به فایلهای کوچکی که قابل مدیریتتر هستند تجزیه کنیم. با ماژول ها، قابلیت استفاده مجدد کد به واقعیت تبدیل می شود. فرض کنید تابعی داریم که به طور مکرر در برنامه های مختلف استفاده می شود. سپس می توانیم این تابع را در یک ماژول تعریف کنیم import آن را در برنامه های مختلف بدون نیاز به کپی کردن کد آن هر بار.
در این مقاله روش ایجاد ماژول های پایتون و روش استفاده از آنها در کدهای پایتون را خواهیم دید.
ماژول های نوشتن
یک ماژول به سادگی یک فایل پایتون با .py
افزونه. نام فایل به نام ماژول تبدیل می شود. در داخل فایل میتوانیم تعاریف و پیادهسازی کلاسها، متغیرها یا توابع را داشته باشیم. سپس می توان از آنها در سایر برنامه های پایتون استفاده کرد.
اجازه دهید با ایجاد تابعی شروع کنیم که به سادگی “Hello World” را چاپ می کند. برای انجام این کار، یک فایل پایتون جدید ایجاد کنید و آن را به عنوان ذخیره کنید hello.py
. کد زیر را به فایل اضافه کنید:
def my_function():
print("Hello World")
اگر کد بالا را اجرا کنید چیزی بر نمی گرداند. این به این دلیل است که ما به برنامه نگفته ایم که کاری انجام دهد. درست است که ما یک تابع به نام ایجاد کرده ایم my_function()
در کد، اما ما تابع را فراخوانی یا فراخوانی نکرده ایم. هنگام فراخوانی، این تابع باید print متن “سلام دنیا”.
اکنون به همان دایرکتوری که فایل فوق را در آن ذخیره کرده اید بروید و یک فایل جدید به نام ایجاد کنید main.py
. کد زیر را به فایل اضافه کنید:
import hello
hello.my_function()
خروجی
Hello World
تابع با موفقیت فراخوانی شد. ما با وارد کردن ماژول شروع کردیم. اسم فایل بود hello.py
، از این رو نام ماژول وارد شده است hello
.
همچنین به نحوی که برای فراخوانی تابع استفاده کرده ایم توجه کنید. این “نقطه” نامیده می شود، که به ما اجازه می دهد ابتدا با تعیین نام ماژول و سپس نام تابع، تابع را فراخوانی کنیم.
با این حال، این تنها یک راه برای وارد کردن ماژول و فراخوانی تابع است. می توانستیم این کار را به صورت زیر انجام دهیم:
from hello import my_function
my_function()
خروجی
Hello World
در مثال بالا، خط اول به مفسر پایتون دستور می دهد import تابعی به نام my_function
از یک ماژول به نام hello
. در چنین حالتی، لازم نیست برای دسترسی به تابع از نماد نقطه استفاده کنید، فقط می توانید مستقیماً آن را فراخوانی کنید.
با این حال، در موردی که ما hello
ماژول دارای چندین توابع است، عبارت from hello import my_function
نخواهد import همه hello
توابع فقط در برنامه ما my_function
. اگر بخواهید به هر تابع دیگری دسترسی داشته باشید، خطایی ایجاد می شود. تو باید import کل ماژول یا import هر تابع فردی به منظور استفاده از آنها.
ما می توانیم متغیری را در یک ماژول تعریف کنیم، که سپس می تواند توسط ماژول های دیگر استفاده شود. برای نشان دادن این، فایل را باز کنید hello.py
و کد زیر را به آن اضافه کنید:
def my_function():
print("Hello World")
name = "Nicholas"
حالا، را باز کنید main.py
فایل و آن را به صورت زیر تغییر دهید:
import hello
hello.my_function()
print(hello.name)
خروجی
Hello World
Nicholas
ما با موفقیت هم تابع و هم متغیر تعریف شده در ماژول را فراخوانی کرده ایم زیرا کل ماژول را به جای فقط وارد کردیم my_function()
تابع.
قبلاً بیان کردیم که میتوانیم یک کلاس را در یک ماژول تعریف کنیم. بیایید روش انجام این کار را در مثال بعدی ببینیم. باز کن hello.py
فایل و آن را به صورت زیر تغییر دهید:
def my_function():
print("Hello World")
name = "Nicholas"
class Student:
def __init__(self, name, course):
self.course = course
self.name = name
def get_student_details(self):
print("Your name is " + self.name + ".")
print("You are studying " + self.course)
در اینجا کلاسی به نام تعریف کرده ایم Student
. دو متغیر در این کلاس تعریف شده است name
و course
. روش get_student_details()
همچنین در این تعریف شده است که جزئیات دانش آموز را به صفحه چاپ می کند console.
حالا فایل را باز کنید main.py
و آن را به صورت زیر اصلاح کنید:
import hello
hello.my_function()
print(hello.name)
nicholas = hello.Student("Nicholas", "Computer Science")
nicholas.get_student_details()
خروجی
Hello World
Nicholas
Your name is Nicholas.
You are studying Computer Science
در اسکریپت بالا، ما دوباره از نماد نقطه برای ایجاد یک شی از the استفاده کردیم student
کلاس از hello
مدول. سپس از آن استفاده کردیم get_student_details()
عملکرد برای دریافت جزئیات دانش آموز.
اگرچه ماژولها عمدتاً از تعاریف کلاس تشکیل شدهاند (در بیشتر موارد)، این امکان وجود دارد که در هنگام وارد کردن، کد خود را نیز اجرا کنند. برای نشان دادن این، اجازه دهید ما را اصلاح کنیم hello.py
فایل، جایی که ما تعریفی از تابع داریم my_function()
، همراه با فراخوانی تابع:
def my_function():
print("Hello World")
my_function()
حالا فایل را باز کنید main.py
و تمام خطوط به جز موارد زیر را حذف کنید:
import hello
خروجی
Hello World
خروجی بالا نشان می دهد که ما تعریف کردیم و تابع درون ماژول نامیده می شود. هنگامی که ماژول وارد می شود، بدون نیاز به فراخوانی تابع، نتیجه را مستقیماً از تابع برمی گرداند. این رفتار همیشه مطلوب نیست، اما برای موارد استفاده خاص، مانند بارگذاری پیشبار دادهها از حافظه پنهان هنگام وارد کردن ماژول، مفید است.
وارد کردن تمام اشیاء ماژول
به import تمام اشیاء (توابع، متغیرها، کلاس ها، و غیره) از یک ماژول، می توانیم استفاده کنیم import *
بیانیه. به عنوان مثال، به import تمام اشیاء موجود در hello
ماژول، می توانیم از عبارت زیر استفاده کنیم:
from hello import *
پس از افزودن عبارت فوق به یک برنامه، می توانیم از هر تابع، متغیر یا کلاس موجود در برنامه استفاده کنیم. hello
ماژول بدون نیاز به پیشوند با آن hello
.
دسترسی به یک ماژول از مسیری دیگر
در پایتون، ماژول ها در بیش از یک پروژه استفاده می شوند. از این رو، اگر ماژول های خود را در دایرکتوری یکی از پروژه ها نگه دارید، معنی ندارد، زیرا پروژه های دیگر نمی توانند به راحتی از آن استفاده کنند.
هر زمان که نیاز به دسترسی به ماژولی دارید که در همان دایرکتوری برنامه شما ذخیره نشده است، چند گزینه دارید. اجازه دهید در چند بخش بعدی به این موارد بپردازیم:
اضافه کردن مسیرها
به import یک ماژول از مسیری دیگر، ابتدا نیاز دارید import را sys
ماژول و همچنین هر ماژول پایتون دیگری که می خواهید در برنامه خود استفاده کنید.
این sys
ماژول توسط کتابخانه استاندارد پایتون ارائه شده است و توابع و پارامترهایی را ارائه می دهد که مختص سیستم هستند. این path.append()
تابع از sys
ماژول می تواند برای اضافه کردن مسیر ماژول به پروژه فعلی استفاده شود.
برای نشان دادن این، برش دهید hello.py
از دایرکتوری که فایل را در آن دارید، فایل کنید main.py
. آن را در فهرست دیگری قرار دهید. در مورد من، من آن را در فهرست “F:\Python” قرار داده ام.
حالا فایل را باز کنید main.py
، import را sys
ماژول و مسیری را که مفسر پایتون به دنبال فایلها میگردد را مشخص کنید. این در زیر نشان داده شده است:
import sys
sys.path.append('F:/Python/')
import hello
خروجی
Hello World
در اسکریپت بالا، خط sys.path.append('F:/Python/')
به مفسر پایتون می گوید که این مسیر را در لیست مسیرهایی که در هنگام وارد کردن ماژول ها جستجو می شوند، قرار دهد.
اضافه کردن ماژول به مسیر پایتون
روش فوق فقط در صورتی کار می کند که شما import را sys
مدول. اگر این کار را نکنید import را sys
ماژول و مسیر ماژول را مشخص کنید، خطا ایجاد می شود. برای در دسترس قرار دادن ماژول برای کل سیستم، می توانید آن را به مسیری اضافه کنید که پایتون معمولا ماژول ها و بسته ها را بررسی می کند. به این ترتیب، شما مجبور نخواهید بود import را sys
ماژول و مسیر ماژول را همانطور که در قسمت قبل انجام دادیم مشخص کنید.
قبل از انجام هر کار دیگری، ابتدا باید مسیری را که پایتون برای ماژول ها و بسته ها جستجو می کند، شناسایی کنید. فقط خط فرمان سیستم عامل خود را باز کرده و اجرا کنید python
فرمان این شما را به پایتون می برد terminal.
وارد کنید sys
ماژول به شرح زیر
import sys
سپس می توانید دستور زیر را اجرا کنید print خارج شدن از مسیر:
print(sys.path)
خروجی شامل حداقل یک مسیر سیستم خواهد بود. اگر این کار را از یک محیط برنامه نویسی انجام دهید، چندین مسیر دریافت خواهید کرد. در مورد من موارد زیر را دریافت کردم:
$ python
Python 2.7.10 (default, Oct 23 2015, 19:19:21)
(GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)) روی darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
('', '/Library/Python/2.7/site-packages/six-1.10.0-py2.7.egg', '/Library/Python/2.7/site-packages/cffi-1.2.1-py2.7-macosx-10.9-intel.egg', '/Library/Python/2.7/site-packages/pycparser-2.14-py2.7.egg', '/Library/Python/2.7/site-packages/virtualenv-13.1.2-py2.7.egg', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/Library/Python/2.7/site-packages')
>>>
هدف شما باید یافتن محیطی باشد که در حال حاضر از آن استفاده می کنید. شما باید به دنبال چیزی شبیه به زیر باشید:
/Library/Python/2.7/site-packages
خود را حرکت دهید hello.py
فایل به مسیر پس از آن، شما قادر خواهید بود import را hello
ماژول از هر دایرکتوری به روش معمول، همانطور که در زیر نشان داده شده است:
import hello
خروجی
Hello World
نتیجه
این نشان دهنده پایان این مقاله است. یک ماژول به سادگی یک فایل پایتون با مجموعه ای از متغیرها و تعاریف تابع است. یک ماژول قابلیت استفاده مجدد کد را تسهیل می کند زیرا شما می توانید یک تابع را در یک ماژول تعریف کنید و آن را از برنامه های مختلف فراخوانی کنید به جای اینکه مجبور باشید تابع را در هر برنامه تعریف کنید. اگرچه یک ماژول بیشتر برای تعاریف تابع و کلاس استفاده می شود، اما ممکن است export متغیرها و نمونه های کلاس
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-22 09:48:03