ماژولها و پکیجها
در این درس با import از ماژولهای استاندارد استفاده میکنید، ماژول خودتان را میسازید، پکیج را میشناسید و اسکریپت را از کتابخانه جدا میکنید.
آنچه در این درس میآموزید
- از ماژولهای استاندارد با import و from و نام مستعار استفاده کنید
- ماژول شخصی بسازید و در فایل دیگری فراخوانی کنید
- با if __name__ == "__main__" اسکریپت اجراشدنی از کتابخانه جدا کنید
فهرست مطالب
تمام کدهای این دوره تا اینجا در تکفایل جا گرفتند؛ اما پروژهٔ واقعی هزاران خط دارد و تکفایلِ بزرگ غیرقابلنگهداری میشود. ماژول (Module) یعنی یک فایل پایتون که تعریفهایش در فایلهای دیگر قابل استفاده است؛ و پکیج (Package) پوشهای از ماژولهاست. با این دو، برنامه به قطعههای معنادار تقسیم میشود و از صدها تابع آمادهٔ پایتون هم میتوانید استفاده کنید.
در این درس import میکنید، ماژول شخصی میسازید و الگویی استاندارد میبینید که فایل را هم کتابخانه نگه میدارد هم اسکریپت اجراشدنی.
ماژولهای آمادهٔ استاندارد
پایتون با خودش صدها ماژول آماده میآورد؛ به این مجموعه میگویند کتابخانهٔ استاندارد:
import math
print(math.sqrt(16))
print(math.pi)
print(math.floor(3.7))4.0 3.141592653589793 3
دستور import ماژول را در دسترس میگذارد و دسترسی به اعضایش با نقطه انجام میشود: math.sqrt یعنی «تابع sqrt در ماژول math». جذر ۱۶ عدد اعشاری 4.0 است و math.pi همان ثابت معروف ریاضی است.
شکلهای دیگر import
from math import sqrt
print(sqrt(25))
import random
random.seed(42)
print(random.randint(1, 10))5.0 2
from math import sqrt فقط همان عضو را میآورد تا مستقیم صدایش کنید؛ برای عضوهای پرتکرار خواناتر است. import X as Y هم نام مستعار میدهد؛ در پروژههای داده بارها import numpy as np را میبینید. ماژول random عدد تصادفی میسازد و random.seed(42) بذر تصادف را ثابت میکند: با بذر ثابت، دنبالهٔ «تصادفی» در هر اجرا یکسان میماند؛ ویژگی لازم برای تست و بازتولید نتیجه.
ماژول خودتان را بسازید
هر فایل با پسوند .py یک ماژول است. فرض کنید فایل utils.py اینقدر داشته باشد:
def greet(name):
return f"Hello {name}!"و در همان پوشه، فایل main.py آن را فراخوانی کند:
from utils import greet
print(greet("Sara"))Hello Sara!
وقتی main.py اجرا میشود، پایتون utils.py را در همان پوشه پیدا میکند و تابع greet را وارد میکند. تعریف یک بار نوشته شده و هر فایلی که به آن نیاز دارد import میکند؛ همان اصل «یک بار تعریف، هر جا استفاده» که در درس توابع دیدید.
پکیج؛ ماژولهای سازمانیافته
پکیج پوشهای از ماژولهاست که فایل __init__.py دارد؛ این فایل حتی میتواند خالی باشد و فقط نشان میدهد «این پوشه یک پکیج است»:
shop/
__init__.py
prices.pyimport از درون پکیج نقطهدار است:
from shop.prices import totalهرچه پروژه بزرگتر شود، پکیجها مرزهای منطقی میسازند: قیمتها در shop.prices، کاربران در shop.users و هر قطعه مسئولیت روشن خودش.
اسکریپت یا کتابخانه؟
الگوی زیر را در کد پایتونهای واقعی زیاد میبینید:
def area(w, h):
return w * h
if __name__ == "__main__":
print(area(3, 4))12
وقتی فایل را مستقیم اجرا میکنید، متغیر ویژهٔ __name__ مقدار "__main__" دارد و بلوک شرط اجرا میشود؛ وقتی همان فایل در جای دیگری import شود، این مقدار تغییر کرده و بلوک نادیده گرفته میشود. نتیجه: کد آزمایشی و اجرای مستقیم از تعریفهای قابل import جدا میماند.
جدول ماژولهای پرکاربرد
| ماژول | کاربرد |
|---|---|
math |
توابع ریاضی و ثابتها |
random |
اعداد و انتخابهای تصادفی |
datetime |
تاریخ و زمان |
json |
تبدیل داده به متن و برعکس |
os |
پوشهها و فایلهای سیستمعامل |
csv |
خواندن و نوشتن فایلهای جدولی |
نمونهای کوچک از datetime؛ تاریخ اینجا ثابت ساخته شده تا خروجی قطعی باشد، ولی در برنامهٔ واقعی date.today() تاریخ امروز را میدهد:
from datetime import date
today = date(2026, 10, 30)
print(today.year)
print(today.strftime("%Y/%m/%d"))2026 2026/10/30
تمرینها
تمرین
تمرین ۱ — وتر با ماژول ریاضی
با استفاده از from math import sqrt تابعی به نام hypotenuse بنویسید که دو ضلع قائم مثلث قائمالزاویه بگیرد و وتر را با رابطهٔ فیثاغورس برگرداند؛ برای ۳ و ۴ نتیجه باید 5.0 شود.
# Write your code hereنمایش راهحل
from math import sqrt
def hypotenuse(a, b):
return sqrt(a ** 2 + b ** 2)
print(hypotenuse(3, 4))5.0
::: :::
خلاصه
- هر فایل .py یک ماژول است و با
importدر فایلهای دیگر قابل استفاده. from X import Yعضو مشخصی میآورد وimport X as Yنام مستعار میدهد.- پکیج پوشهای از ماژولها با
__init__.pyاست و importاش نقطهدار است. if __name__ == "__main__":فایل را هم کتابخانه نگه میدارد هم اسکریپت اجراشدنی.- کتابخانهٔ استاندارد پاسخ بیشتر نیازهای رایج است؛ نام فایلهایتان را با آن یکی نکنید.
کد را فایلبندی و سازماندهی کردید؛ در درس بعدی به مهمترین الگوی طراحی در پایتون میرسیم: کلاس و شیء.