Kahibaro
Discord Login Register

وارد کردن ماژول‌ها

تفاوت «ماژول» و «import» در عمل

در این بخش فرض می‌کنیم که پیش‌تر در همین فصل با مفهوم کلی «کتابخانه» و «ماژول» آشنا شده‌اید. اینجا تمرکز ما فقط روی شیوه‌های مختلف وارد کردن ماژول‌ها در کد پایتون است و این‌که هر روش چه اثری روی کد شما می‌گذارد.

ماژول (مثلاً math، random یا فایلی مثل my_utils.py) در واقع فایلی است که داخلش کد پایتون نوشته شده و می‌توانیم از توابع، کلاس‌ها و متغیرهای آن در برنامهٔ خودمان استفاده کنیم. برای دسترسی به آن‌ها باید از دستورهای مختلف import استفاده کنیم.

در ادامه مهم‌ترین الگوهای استفاده از import را می‌بینید.

وارد کردن کامل یک ماژول

ساده‌ترین و رایج‌ترین حالت:

import math
print(math.sqrt(16))   # استفاده از تابع sqrt از داخل ماژول math

نکته‌ها:

این روش برای یادگیری و برای بیشتر برنامه‌های ساده روش پیشنهادی است.

وارد کردن با نام مستعار (`as`)

گاهی نام ماژول طولانی است یا قرار است زیاد از آن استفاده کنید؛ در این صورت می‌توانید یک نام کوتاه‌تر به آن بدهید:

import math as m
print(m.sqrt(25))
print(m.pi)

یا برای مثال مشهور:

import numpy as np
import pandas as pd

نکته‌ها:

وارد کردن فقط بعضی از اعضای ماژول

اگر فقط به یکی دو تابع یا متغیر از یک ماژول نیاز دارید، می‌توانید فقط همان‌ها را وارد کنید:

from math import sqrt, pi
print(sqrt(9))  # دیگر نیازی نیست بنویسیم math.sqrt
print(pi)

نکته‌ها:

این روش زمانی مفید است که:

اما مراقب تداخل نام باشید؛ اگر خودتان هم متغیری به نام pi تعریف کنید، یکی از آن‌ها روی دیگری می‌افتد.

استفاده از نام مستعار برای اعضای ماژول

همان‌طور که می‌توانیم برای ماژول نام مستعار تعیین کنیم، می‌توانیم برای توابع و متغیرهایی که از آن‌ها وارد می‌کنیم هم نام مستعار بگذاریم:

from math import sqrt as r, pi as PI
print(r(36))
print(PI)

این کار در موارد زیر به درد می‌خورد:

وارد کردن «همه چیز» با `from module import *`

پایتون اجازه می‌دهد کل محتوای یک ماژول را با * وارد کنید:

from math import *
print(sqrt(16))
print(pi)

این کار به این معناست که «تقریباً» تمام اعضای عمومی ماژول (math) وارد فضای نام فعلی می‌شوند.

اما این روش تقریباً همیشه پیشنهاد نمی‌شود، به‌خصوص برای تازه‌کارها، چون:

بهتر است به‌جای این روش، از یکی از روش‌های قبلی (به‌خصوص import module یا from module import name1, name2) استفاده کنید.

چندین ماژول در یک فایل

می‌توانید در یک فایل پایتون چندین ماژول را با هم وارد کنید:

import math
import random
x = math.sqrt(49)
y = random.randint(1, 10)
print(x, y)

یا به شکل فشرده‌تر در یک خط:

import math, random

ولی معمولاً برای خواناتر شدن، هر ماژول را در یک خط جداگانه می‌نویسیم:

import math
import random
import datetime

نکته‌های مرتب‌سازی:

وارد کردن ماژول‌های خودتان (فایل‌های دیگر)

اگر فایلی به نام helpers.py در همان پوشهٔ فایل اصلی شما وجود داشته باشد، می‌توانید آن را مثل یک ماژول وارد کنید:

# فایل helpers.py
def salam():
    print("سلام از helpers!")
# فایل main.py
import helpers
helpers.salam()

نکته‌ها:

همچنین می‌توانید از from helpers import salam هم استفاده کنید:

from helpers import salam
salam()

وارد کردن فقط هنگام نیاز (import درون تابع)

معمولاً importها را در ابتدای فایل می‌نویسند، اما از نظر فنی می‌توانید داخل یک تابع هم import کنید:

def calc():
    import math
    return math.sqrt(81)
print(calc())

این کار گاهی برای به‌تعویق انداختن بارگذاری یک کتابخانهٔ سنگین استفاده می‌شود، ولی برای شروع بهتر است تمام importها را بالای فایل بنویسید تا کد خواناتر و قابل‌پیش‌بینی‌تر باشد.

نام فضای فعلی و جلوگیری از تداخل

هر متغیری که در فایل شما تعریف شود، در فضای نام (namespace) آن فایل قرار می‌گیرد. زمانی که می‌نویسید:

from math import pi

دیگر متغیری با نام pi در فضای نام شما وجود دارد. اگر بعداً بنویسید:

pi = 3

مقدار pi شما دیگر آن ثابت math.pi نخواهد بود، بلکه این مقدار جدید را می‌گیرد. برای جلوگیری از این‌گونه تداخل‌ها:

این‌که چه روشی انتخاب می‌کنید، به سلیقه و سبک کدنویسی بستگی دارد، ولی در شروع کار، استفاده از import module امن‌تر و شفاف‌تر است.

چگونه بفهمیم چه چیزی در یک ماژول وجود دارد؟

گاهی می‌خواهید ببینید داخل یک ماژول چه تابع‌ها و متغیرهایی هست. در حالت تعاملی پایتون (یا در یک اسکریپت برای آزمون) می‌توانید از dir() استفاده کنید:

import math
print(dir(math))

این دستور یک لیست از نام اعضای ماژول به شما می‌دهد. همچنین می‌توانید از تابع help() برای گرفتن توضیح دربارهٔ ماژول یا یک تابع خاص استفاده کنید (توضیح کامل‌تر دربارهٔ مستندات و help() می‌تواند در بخش‌های دیگر بیاید، اینجا فقط ایدهٔ کلی را می‌بینید):

import math
help(math.sqrt)

نکته‌های عملی هنگام استفاده از import

این الگوهای مختلف وارد کردن ماژول‌ها پایهٔ کار با کتابخانه‌های مختلف پایتون هستند؛ در بخش‌های بعدی همین فصل با نمونه‌های واقعی و رایج (مثل math, random, datetime و نصب کتابخانه‌های خارجی) این مفاهیم را در عمل خواهید دید.

Views: 5

Comments

Please login to add a comment.

Don't have an account? Register now!