الفرق بين المراجعتين لصفحة: «Python/import»
إضافة الصّفحة |
لا ملخص تعديل |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:الدالة <code>__import__()</code> في بايثون}}</noinclude> | <noinclude>{{DISPLAYTITLE:الدالة <code>__import__()</code> في بايثون}}</noinclude> | ||
تسترِد الدّالة <code> | تسترِد الدّالة <code>__import__()</code> الوحدة المُعطاة. | ||
'''ملاحظة:''' هذه الدّالة مُتقدّمة غير مطلوبة في برمجة بايثون الاعتياديّة، على عكس الدّالة <code>importlib.import_module()</code>. | '''ملاحظة:''' هذه الدّالة مُتقدّمة غير مطلوبة في برمجة بايثون الاعتياديّة، على عكس الدّالة <code>importlib.import_module()</code>. | ||
تستدعي الجملة <code>import</code> الدّالةَ <code>__import__()</code> ويُمكن استبدالها عبر استيراد <code>builtins</code> وتعيين دالّة جديدة للخاصيّة <code>builtins.__import__</code> إن أردت تغيير كيفيّة تصرّف الجملة <code>import</code>، لكنّ هذا الأمر غير منصوح به بشدّة إذ عادةً ما تكون خُطّافات الاستيراد (انظر PEP 302) وسيلةً أكثر بساطة للوصول إلى نفس الغاية ولا تُسبّب مشاكل مع الشّيفرة التي تعتمد على كون آليّة الاستيراد طبيعيّة دون تغيير. واستعمال الدّالة <code>__import__()</code> مُباشرةً غير منصوح به كذلك، استعمل الدّالة <code>importlib.import_module()</code> عوضًا عنها. | تستدعي الجملة <code>import</code> الدّالةَ <code>__import__()</code> ويُمكن استبدالها عبر استيراد <code>builtins</code> وتعيين دالّة جديدة للخاصيّة <code>builtins.__import__</code> إن أردت تغيير كيفيّة تصرّف الجملة <code>import</code>، لكنّ هذا الأمر غير منصوح به بشدّة إذ عادةً ما تكون خُطّافات الاستيراد (انظر PEP 302) وسيلةً أكثر بساطة للوصول إلى نفس الغاية ولا تُسبّب مشاكل مع الشّيفرة التي تعتمد على كون آليّة الاستيراد طبيعيّة دون تغيير. واستعمال الدّالة <code>__import__()</code> مُباشرةً غير منصوح به كذلك، استعمل الدّالة <code>importlib.import_module()</code> عوضًا عنها. | ||
== البنية العامة == | == البنية العامة == | ||
سطر 21: | سطر 21: | ||
=== <code>locals</code> === | === <code>locals</code> === | ||
مُعامل اختياريّ. | مُعامل اختياريّ. | ||
الكائنات المحليّة التي تُحدّد كيفيّة تفسير الاسم في سياق حزمةٍ مُعيّنة. | الكائنات المحليّة التي تُحدّد كيفيّة تفسير الاسم في سياق حزمةٍ مُعيّنة. | ||
آليّة العمل القياسيّة لا تستخدم أبدًا هذا المُعامل، وتستخدم المُعامل <code>globals</code> فقط لتحديد سياق حزمة جملة الاستيراد <code>import</code>. | آليّة العمل القياسيّة لا تستخدم أبدًا هذا المُعامل، وتستخدم المُعامل <code>globals</code> فقط لتحديد سياق حزمة جملة الاستيراد <code>import</code>. | ||
سطر 26: | سطر 27: | ||
=== <code>fromlist</code> === | === <code>fromlist</code> === | ||
مُعامل اختياريّ. | مُعامل اختياريّ. | ||
قائمة تحتوي على أسماء الكائنات أو الوحدات الفرعيّة التي يجب استيرادها من الوحدة المُعطى اسمُها للمُعامِل <code>name</code>. | قائمة تحتوي على أسماء الكائنات أو الوحدات الفرعيّة التي يجب استيرادها من الوحدة المُعطى اسمُها للمُعامِل <code>name</code>. | ||
=== <code>level</code> === | === <code>level</code> === | ||
مُعامل اختياريّ. | مُعامل اختياريّ. | ||
يُحدّد ما إذا كان الاستيراد مُطلقًا أو نسبيًّا. القيمة الافتراضيّة <code>0</code> تعني أنّ الاستيرادات ستكون مطلقةً حصرًا. القيم الموجبة تُشير إلى عدد المُجلّدات الآباء التي ستُبحَث نسبةً إلى مُجلّد الوحدة التي تستدعي الدّالة <code>__import__()</code> (انظر PEP 328 للاستزادة). | |||
يُحدّد ما إذا كان الاستيراد مُطلقًا أو نسبيًّا. القيمة الافتراضيّة <code>0</code> تعني أنّ الاستيرادات ستكون مطلقةً حصرًا. القيم الموجبة تُشير إلى عدد المُجلّدات الآباء التي ستُبحَث نسبةً إلى مُجلّد الوحدة التي تستدعي الدّالة <code>__import__()</code> (انظر PEP 328 للاستزادة). | |||
== القيمة المعادة == | == القيمة المعادة == | ||
سطر 46: | سطر 49: | ||
spam = __import__('spam.ham', globals(), locals(), [], 0) | spam = __import__('spam.ham', globals(), locals(), [], 0) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
لاحظ كيف أنّ الدّالة <code>__import__()</code> تُعيد الوحدة العليا (<code>spam</code> في هذه الحالة) لأنّها هي الكائن المُرتبط باسمٍ من طرف الجملة <code>import</code> هنا. | لاحظ كيف أنّ الدّالة <code>__import__()</code> تُعيد الوحدة العليا (<code>spam</code> في هذه الحالة) لأنّها هي الكائن المُرتبط باسمٍ من طرف الجملة <code>import</code> هنا. | ||
أمّا الجملة <code>from spam.ham import eggs, sausage as saus</code> فستُنتج ما يلي: | أمّا الجملة <code>from spam.ham import eggs, sausage as saus</code> فستُنتج ما يلي: | ||
سطر 54: | سطر 57: | ||
saus = _temp.sausage | saus = _temp.sausage | ||
</syntaxhighlight> | </syntaxhighlight> | ||
في هذا المثال، تُعاد الوحدة <code>spam.ham</code> من استدعاء الدّالة <code>__import__()</code>. ويُحصَل على الأسماء المُراد استيرادها من الكائن المُعاد. | في هذا المثال، تُعاد الوحدة <code>spam.ham</code> من استدعاء الدّالة <code>__import__()</code>. ويُحصَل على الأسماء المُراد استيرادها من الكائن المُعاد. | ||
== ملاحظات == | == ملاحظات == | ||
إن أردت استيراد وحدة (قد تكون داخل حزمة) باسمها ببساطة، استعمل الدّالة [[Python/importlib/ | إن أردت استيراد وحدة (قد تكون داخل حزمة) باسمها ببساطة، استعمل الدّالة <code>[[Python/importlib/import module|importlib.import_module]]</code>. | ||
== انظر أيضًا == | == انظر أيضًا == | ||
* [[Python/standard-modules|الوحدات القياسية في بايثون]]. | * [[Python/standard-modules|الوحدات القياسية في بايثون]]. | ||
*[[Python/importlib/ | * الدّالة <code>[[Python/importlib/import module|importlib.import_module]]</code>. | ||
* [[Python/packages|الحزم Packages في بايثون]]. | * [[Python/packages|الحزم Packages في بايثون]]. | ||
مراجعة 16:08، 24 مايو 2018
تسترِد الدّالة __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
تُنتج شيفرة بايتات (import spam) مُشابهة للشّيفرة التّالية:
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
.