خارجی (import)
چرا import؟
- توابعی که بهصورت داخلی (built-in) نیستند، باید از پکیج/ماژول دیگه وارد بشن
- کلیدواژه:
import
ماژول math
- وارد کردن:
import math - دسترسی به توابع با نقطه (dot notation):
math.func_name
ماژول random
- تولید اعداد شبهتصادفی (Pseudo-random) — واقعاً تصادفی نیستن ولی تشخیصشون سخته
| تابع | کار | مثال |
|---|---|---|
random.random() |
عدد اعشاری تصادفی بین 0 و 1 (بدون خود ۱) |
|
random.randint(5, 10) |
عدد صحیح تصادفی در بازه | 7 |
random.choice(t) |
یک عنصر تصادفی از لیست | t=[1,2,3] → 3 |
نصب پکیج خارجی (pip)
- اگه پکیج نصب نباشه:
سه روش 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 داریم:
حالا توی یک فایل دیگه (مثلاً main.py) که کنار همون فایل قرار داره:
5
16
- توجه: اسم فایل بدون پسوند
.pyمیشه اسم ماژول — یعنیimport calc، نهimport calc.py - میشه از همون روشهای alias یا
from ... import ...هم استفاده کرد:
فایل پکیج
- وقتی چند ماژول مرتبط رو توی یک پوشه کنار هم میذاریم، اون پوشه یه پکیج میشه
- برای اینکه پایتون اون پوشه رو بهعنوان پکیج بشناسه، باید داخلش یک فایل به اسم
__init__.pyوجود داشته باشه (حتی اگه خالی باشه)
ساختار پوشهای:
mypackage/
__init__.py
calc.py
strings.py
استفاده:
__init__.pyمیتونه خالی باشه (فقط برای معرفی پوشه بهعنوان پکیج)، یا میتونه کدی داشته باشه که وقتی پکیج import میشه، اجرا بشه — مثلاً import کردن خودکار زیرماژولها:
با این کار میشه مستقیم نوشت:
بدون اینکه لازم باشه اسم فایل calc رو هم بدونیم
نکته: از پایتون ۳.۳ به بعد، پکیج بدون
__init__.pyهم کار میکنه (namespace package)، ولی برای وضوح بیشتر و سازگاری، همچنان رایجه که این فایل رو (حتی خالی) بذارین.
if __name__ == "__main__" چیه و چرا استفاده میشه؟
- هر فایل پایتون یه متغیر داخلی به اسم
__name__داره - وقتی فایل مستقیم اجرا بشه (مثلاً
python calc.py)، مقدار__name__برابر"__main__"میشه - وقتی همون فایل بهعنوان ماژول import بشه، مقدار
__name__برابر اسم خود فایل میشه (مثلاً"calc")
- اگه
main.pyاین فایل رو import کنه (import calc)، خط اولprintاجرا میشه ولی بخش داخلifاجرا نمیشه - اگه خود
calc.pyمستقیم اجرا بشه، هر دو اجرا میشن
چرا این کار مفیده؟
- به ما اجازه میده یک فایل هم بهعنوان ماژول قابلاستفاده توسط فایلهای دیگه باشه، هم بهعنوان برنامهی مستقل قابل اجرا
- معمولاً برای تست سریع توابع یک فایل، بدون اینکه اون تستها وقتی فایل import میشه هم اجرا بشن: