خارجی (import)

اصلاح شده

2026-08-20

چرا import؟

  • توابعی که به‌صورت داخلی (built-in) نیستند، باید از پکیج/ماژول دیگه وارد بشن
  • کلیدواژه: import

ماژول math

  • وارد کردن: import math
  • دسترسی به توابع با نقطه (dot notation): math.func_name
decibels = 10 * math.log10(ratio)
height = math.sin(radians)

ماژول random

  • تولید اعداد شبه‌تصادفی (Pseudo-random) — واقعاً تصادفی نیستن ولی تشخیصشون سخته
تابع کار مثال
random.random() عدد اعشاری تصادفی بین 0 و 1 (بدون خود ۱)
random.randint(5, 10) عدد صحیح تصادفی در بازه 7
random.choice(t) یک عنصر تصادفی از لیست t=[1,2,3]3
import random
for i in range(10):
    x = random.random()
    print(x)

نصب پکیج خارجی (pip)

  • اگه پکیج نصب نباشه:
pip install numpy

سه روش import

روش سینتکس استفاده
کامل import numpy numpy.sin(numpy.pi)
با نامک (alias) import numpy as np np.sin(np.pi)
فقط توابع خاص from numpy import sin, pi sin(pi) (بدون پیشوند)

ساخت ماژول شخصی

  • هر فایل .py خودش یک ماژوله — می‌شه از توابع یک فایل، توی فایل دیگه استفاده کرد، دقیقاً مثل math یا random

فرض کنیم فایلی به اسم calc.py داریم:

# calc.py
def add(a, b):
    return a + b

def square(x):
    return x ** 2

حالا توی یک فایل دیگه (مثلاً main.py) که کنار همون فایل قرار داره:

# main.py
import calc

print(calc.add(2, 3))      # 5
print(calc.square(4))      # 16
  • توجه: اسم فایل بدون پسوند .py می‌شه اسم ماژول — یعنی import calc، نه import calc.py
  • می‌شه از همون روش‌های alias یا from ... import ... هم استفاده کرد:
from calc import add
import calc as c

فایل پکیج

  • وقتی چند ماژول مرتبط رو توی یک پوشه کنار هم می‌ذاریم، اون پوشه یه پکیج می‌شه
  • برای اینکه پایتون اون پوشه رو به‌عنوان پکیج بشناسه، باید داخلش یک فایل به اسم __init__.py وجود داشته باشه (حتی اگه خالی باشه)

ساختار پوشه‌ای:

mypackage/
    __init__.py
    calc.py
    strings.py

استفاده:

from mypackage import calc
print(calc.add(2, 3))

# یا:
import mypackage.calc as calc
  • __init__.py می‌تونه خالی باشه (فقط برای معرفی پوشه به‌عنوان پکیج)، یا می‌تونه کدی داشته باشه که وقتی پکیج import می‌شه، اجرا بشه — مثلاً import کردن خودکار زیرماژول‌ها:
# __init__.py
from .calc import add, square

با این کار می‌شه مستقیم نوشت:

from mypackage import add

بدون اینکه لازم باشه اسم فایل calc رو هم بدونیم

نکته: از پایتون ۳.۳ به بعد، پکیج بدون __init__.py هم کار می‌کنه (namespace package)، ولی برای وضوح بیشتر و سازگاری، همچنان رایجه که این فایل رو (حتی خالی) بذارین.

if __name__ == "__main__" چیه و چرا استفاده می‌شه؟

  • هر فایل پایتون یه متغیر داخلی به اسم __name__ داره
  • وقتی فایل مستقیم اجرا بشه (مثلاً python calc.py)، مقدار __name__ برابر "__main__" می‌شه
  • وقتی همون فایل به‌عنوان ماژول import بشه، مقدار __name__ برابر اسم خود فایل می‌شه (مثلاً "calc")
# calc.py
def add(a, b):
    return a + b

print("این خط همیشه اجرا می‌شه، چه import بشه چه مستقیم اجرا بشه")

if __name__ == "__main__":
    print("این خط فقط وقتی اجرا می‌شه که calc.py مستقیم اجرا بشه")
    print(add(2, 3))
  • اگه main.py این فایل رو import کنه (import calc)، خط اول print اجرا می‌شه ولی بخش داخل if اجرا نمی‌شه
  • اگه خود calc.py مستقیم اجرا بشه، هر دو اجرا می‌شن

چرا این کار مفیده؟

  • به ما اجازه می‌ده یک فایل هم به‌عنوان ماژول قابل‌استفاده توسط فایل‌های دیگه باشه، هم به‌عنوان برنامه‌ی مستقل قابل اجرا
  • معمولاً برای تست سریع توابع یک فایل، بدون اینکه اون تست‌ها وقتی فایل import می‌شه هم اجرا بشن:
def process(data):
    return [x * 2 for x in data]

if __name__ == "__main__":
    # این بخش فقط برای تست دستیه، وقتی فایل import بشه اجرا نمی‌شه
    sample = [1, 2, 3]
    print(process(sample))