برنامه نویسی 7481 بازدید

در مطالب پیشین آموزش «زبان برنامه‌نویسی پایتون» (Python Programming Language)، به مباحث مقدماتی پایتون شامل «کلیدواژه‌ها و شناساگرها» (Keywords and Identifiers)، «دستورات پایتون و دندانه گذاری» (Statements and Indentation)، «توضیحات» (Comments)، «انواع متغیرها» (Variables)، «انواع داده» (Data Types)، «تبدیل نوع» (Type Conversion)، «ورودی و خروجی» (I/O)، «عملگرها» (Operators)، «فضای نام» (Namespace)، «دستورات شرطی» (Conditional Statements) و «حلقه‌ها» (Loops) پرداخته شد. همچنین، در بحث توابع، مباحث گوناگون از جمله مفهوم تابع و چگونگی تعریف آن، «آرگومان‌ها» (Arguments)، «تابع بازگشتی» (Recursive Function)، تابع بی‌نام (لاندا | Lambda) و «دامنه متغیرها» (Scope of Variables) مورد بررسی قرار گرفت. در این مطلب، ماژول های پایتون (Python Modules) بررسی خواهند شد. در ادامه، روش ساختن و وارد کردن (ایمپورت | Import) ماژول‌های سفارشی در پایتون آموزش داده می‌شود. همچنین، روش‌های گوناگون موجود برای وارد کردن و استفاده از «ماژول‌های توکار» (Built-in Modules) بیان می‌شوند.

ماژول های پایتون

«ماژول» (Module) به فایلی گفته می‌شود که حاوی دستورات و تعاریف پایتون است. یک فایل حاوی کدهای پایتون، برای مثال example.py، یک ماژول نامیده می‌شود؛ برای مثال بیان شده، نام ماژول «example» است. از ماژول‌ها برای شکستن برنامه‌ها به فایل‌های کوچک و قابل مدیریت استفاده می‌شود. علاوه بر آن، ماژول‌ها قابلیت استفاده مجدد از کد را فراهم می‌کنند. کاربران می‌توانند به جای کپی کردن تعاریف در برنامه‌های گوناگون، توابع پر استفاده خود را تعریف و وارد کنند (ایمپورت). در ادامه، روش ساخت یک ماژول در پایتون آموزش داده خواهد شد. در این راستا، باید قطعه کد زیر را نوشت و آن را با عنوان example.py ذخیره کرد.

# Python Module example

def add(a, b):
   """This program adds two
   numbers and return the result"""

   result = a + b
   return result

در اینجا، تابع ()add درون یک ماژول به اسم example تعریف شده است. تابع، دو عدد را دریافت و مجموعه آن‌ها را محاسبه می‌کند.

روش وارد کردن ماژول های پایتون

در پایتون، می‌توان تعریف تابع درون یک ماژول را در ماژولی دیگر و یا مفسر تعاملی پایتون (Interactive Interpreter) فراخوانی کرد. از کلیدواژه import برای انجام این کار استفاده می‌شود. برای وارد کردن ماژول از پیش تعریف شده example، دستور زیر را باید در خط فرمان پایتون وارد کرد.

import example

این دستور، نام توابع موجود در ماژول example را به طور مستقیم در «جدول نماد» (Symbol Table) جاری وارد نمی‌کند. بلکه، صرفا نام ماژول example را در آنجا وارد می‌کند. با استفاده از نام ماژول‌ها، می‌توان به توابع با استفاده از عملگر نقطه یعنی «.» دسترسی داشت. دستور زیر، مثالی از این مورد است.

example

حجم بسیار بالا و قابل توجهی از ماژول‌های استاندارد برای پایتون موجود هستند. فایل این ماژول‌ها در Lib directory، درون محلی که پایتون نصب شده، قرار دارند. ماژول های استاندارد را می‌توان به شیوه‌ای مشابه با روشی که ماژول‌های تعریف شده توسط کاربر در مثال‌های بالا وارد شده‌اند، به برنامه وارد (ایمپورت) کرد. راه‌های متعددی برای وارد کردن ماژول‌ها وجود دارد. این راهکارها در ادامه بیان شده‌اند.

دستور Import در پایتون

می‌توان یک ماژول را با استفاده از دستور import وارد کرد و به تعاریف درون آن با استفاده از عملگر «.»، به شیوه بیان شده در بالا، دسترسی داشت. در ادامه، مثالی برای این موضوع بیان شده است.

# import statement example
# to import standard module math

import math
print("The value of pi is", math.pi)

خروجی حاصل از اجرای برنامه بالا، به صورت زیر است.

The value of pi is 3.141592653589793

وارد کردن ماژول‌ها با تغییر نام

یک ماژول را می‌توان با تغییر نام آن، به صورت زیر وارد کرد.

# import module by renaming it

import math as m
print("The value of pi is", m.pi)

در قطعه کد بالا، ماژول math به m تغییر نام داده شد. انجام این کار، در برخی از شرایط منجر به صرفه‌جویی در زمان مورد استفاده برای تایپ می‌شود. توجه به این نکته لازم است که math در دامنه برنامه شناخته شده نیست. بنابراین، math.pi غیر معتبر و m.pi پیاده‌سازی صحیح است.

استفاده از from … import در پایتون

می‌توان نام‌های خاصی را از یک ماژول بدون وارد کردن کل ماژول، وارد کرد. در ادامه، مثالی از آنچه بیان شد آورده شده است.

# import only pi from math module

from math import pi
print("The value of pi is", pi)

با استفاده از قطعه کد بالا، فقط مشخصه pi از ماژول فراخوانی شد. در چنین مثال‌هایی، از عملگر dot استفاده نمی‌شود. می‌توان چندین مشخصه را به صورت زیر وارد کرد.

>>> from math import pi, e
>>> pi
3.141592653589793
>>> e
2.718281828459045

وارد کردن همه اسامی

می‌توان همه اسامی (تعاریف) را از یک ماژول و با استفاده از ساختار زیر، وارد کرد.

# import all names from the standard module math

from math import *
print("The value of pi is", pi)

همه تعاریف از ماژول math وارد شدند. این امر موجب می‌شود همه اسامی به جز مواردی که با «خط تیره» (Underline) آغاز می‌شوند، در دامنه قابل مشاهده باشند. وارد کردن همه چیزی با استفاده از «*»، یک حرکت برنامه‌نویسی خوب نیست. این امر می‌تواند منجر به تکرار تعاریف برای یک شناساگر شود. همچنین، خوانایی کد را تحت تاثیر قرار داده و کاهش می‌دهد.

مسیر جستجوی ماژول های پایتون

هنگام وارد کردن یک ماژول، پایتون چندین محل را بررسی می‌کند. مفسر، ابتدا به دنبال یک ماژول توکار می‌گردد؛ اگر آن را پیدا نکرد، لیست دایرکتوری‌های تعریف شده در sys.path را جست و جو می‌کند. ترتیب جست و جو به صورتی است که در ادامه آورده شده است.

  • دایرکتوری جاری
  • PYTHONPATH (یک متغیر محیطی با لیستی از دایرکتوری‌ها)
  • دایرکتوری پیش‌فرض وابسته به نصب
>>> import sys
>>> sys.path
['',
'C:\\Python33\\Lib\\idlelib',
'C:\\Windows\\system32\\python33.zip',
'C:\\Python33\\DLLs',
'C:\\Python33\\lib',
'C:\\Python33',
'C:\\Python33\\lib\\site-packages']

کاربر می‌تواند این فایل را ویرایش و مسیرهای مد نظر خودش را به آن اضافه کند.

بارگذاری مجدد یک ماژول

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

# This module shows the effect of
#  multiple imports and reload

print("This code got executed")

می‌توان مشاهده کرد که کد، فقط یک بار اجرا شده است. این امر نشانگر آن است که ماژول، فقط یک‌بار وارد شده است. اکنون، اگر ماژول در طول برنامه تغییر کند، باید مجددا بارگذاری شود. یک راه برای انجام این کار، بازنشانی مفسر است. اما این کار کمک زیادی نخواهد کرد. پایتون، یک راهکار مناسب برای این کار فراهم می‌کند. می‌توان از تابع ()reload درون ماژول imp برای بازنشانی یک ماژول استفاده کرد. روش انجام این کار، در مثال زیر آمده است.

>>> import imp
>>> import my_module
This code got executed
>>> import my_module
>>> imp.reload(my_module)
This code got executed
<module 'my_module' from '.\\my_module.py'>

تابع توکار ()dir

می‌توان از تابع ()dir برای پیدا کردن نام‌هایی که درون ماژول تعریف شده‌اند، استفاده کرد. برای مثال، یک تابع ()add در ماژول example تعریف شده است که در ابتدای این مطلب به آن پرداخته شد.

>>> dir(example)
['__builtins__',
'__cached__',
'__doc__',
'__file__',
'__initializing__',
'__loader__',
'__name__',
'__package__',
'add']

در اینجا می‌توان یک لیست مرتب شده از اسامی (همراه با add) را مشاهده کرد. سایر اسامی که با خط تیره شروع شده‌اند، خصیصه‌های پیش‌فرض مرتبط با ماژول در پایتون هستند (این موارد توسط کاربر تعریف نشده‌اند). برای مثال، خصیصه __name__ حاوی نام ماژول است.

>>> import example
>>> example.__name__
'example'

همه اسامی تعریف شده در «فضای نام» (Namespace) جاری را می‌توان با استفاده از تابع ()dir و بدون هیچ آرگومانی پیدا کرد.

>>> a = 1
>>> b = "hello"
>>> import math
>>> dir()
['__builtins__', '__doc__', '__name__', 'a', 'b', 'math', 'pyscripter']

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای 29 نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

«الهام حصارکی»، فارغ‌التحصیل مقطع کارشناسی ارشد مهندسی فناوری اطلاعات، گرایش سیستم‌های اطلاعات مدیریت است. او در زمینه هوش مصنوعی و داده‌کاوی، به ویژه تحلیل شبکه‌های اجتماعی، فعالیت می‌کند.

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *