الدالة __import__()
في بايثون
تسترِد الدّالة __import__()
الوحدة المُعطاة.
ملاحظة: هذه الدّالة مُتقدّمة غير مطلوبة في برمجة بايثون الاعتياديّة، على عكس الدّالة importlib.import_module
.
تستدعي الجملة import
الدّالةَ __import__()
ويُمكن استبدالها عبر استيراد builtins
وتعيين دالّة جديدة للخاصيّة builtins.__import__
إن أردت تغيير كيفيّة تصرّف الجملة import
، لكنّ هذا الأمر غير منصوح به بشدّة إذ عادةً ما تكون خُطّافات الاستيراد (انظر PEP 302) وسيلةً أكثر بساطة للوصول إلى نفس الغاية ولا تُسبّب مشاكل مع الشّيفرة التي تعتمد على كون آليّة الاستيراد طبيعيّة دون تغيّر. واستعمال الدّالة __import__()
مُباشرةً غير منصوح به كذلك، استعمل الدّالة importlib.import_module()
عوضًا عنها.
البنية العامة
__import__(name, globals=None, locals=None, fromlist=(), level=0)
المعاملات
name
سلسلة نصيّة تُمثّل اسم الوحدة المرغوب استيرادها.
globals
مُعامل اختياريّ.
الكائنات العامّة التي تُحدّد كيفيّة تفسير الاسم في سياق حزمةٍ (package context) مُعيّنة.
locals
مُعامل اختياريّ.
الكائنات المحليّة التي تُحدّد كيفيّة تفسير الاسم في سياق حزمةٍ مُعيّنة. آليّة العمل القياسيّة لا تستخدم أبدًا هذا المُعامل، وتستخدم المُعامل globals
فقط لتحديد سياق حزمة جملة الاستيراد import
.
fromlist
مُعامل اختياريّ.
قائمة تحتوي على أسماء الكائنات أو الوحدات الفرعيّة التي يجب استيرادها من الوحدة المُعطى اسمُها للمُعامِل name
.
level
مُعامل اختياريّ.
يُحدّد ما إذا كان الاستيراد مُطلقًا أو نسبيًّا. القيمة الافتراضيّة 0
تعني أنّ الاستيرادات ستكون مطلقةً حصرًا. القيم الموجبة تُشير إلى عدد المُجلّدات الآباء التي ستُبحَث نسبةً إلى مُجلّد الوحدة التي تستدعي الدّالة __import__()
(انظر PEP 328 للاستزادة).
القيمة المعادة
الوحدة المُستوردة.
إن كان المُعامل name
على شكل package.module
، فستُعاد عادةً الحزمة العلويّة إلى أوّل نقطة (أي package
في هذه الحالة)، ولن تُعاد الوحدة المُعطاة للمُعامل name
(أي package.module
في هذه الحالة). لكن عندما لا تكون قيمة المُعامل fromlist
فارغة، فستُعاد الوحدة ذات الاسم المُعطى للمُعامل name
(انظر الأمثلة).
أمثلة
على سبيل المثال، الجملة import spam
تُنتج شيفرة بايتات (bytecode) مُشابهة للشّيفرة التّالية:
spam = __import__('spam', globals(), locals(), [], 0)
أمّا الجملة import spam.ham
فتُنتج الاستدعاء التّالي:
spam = __import__('spam.ham', globals(), locals(), [], 0)
لاحظ كيف أنّ الدّالة __import__()
تُعيد الوحدة العليا (spam
في هذه الحالة) لأنّها هي الكائن المُرتبط باسمٍ من طرف الجملة import
هنا.
أمّا الجملة from spam.ham import eggs, sausage as saus
فستُنتج ما يلي:
_temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], 0)
eggs = _temp.eggs
saus = _temp.sausage
في هذا المثال، تُعاد الوحدة spam.ham
من استدعاء الدّالة __import__()
. ويُحصَل على الأسماء المُراد استيرادها من الكائن المُعاد.
ملاحظات
إن أردت استيراد وحدة (قد تكون داخل حزمة) باسمها ببساطة، استعمل الدّالة importlib.import_module
.