الفرق بين المراجعتين ل"Python/import"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(إضافة الصّفحة)
 
 
(4 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:الدالة <code>__import__()‎</code> في بايثون}}</noinclude>
+
<noinclude>{{DISPLAYTITLE:الدالة <code>‎‎__import__()‎</code> في بايثون}}</noinclude>
تسترِد الدّالة <code>__import__()</code> الوحدة المُعطاة.
+
تسترِد الدّالة <code>__‎‎import‎‎_‎_‎()‎‎</code> الوحدة المُعطاة.
  
'''ملاحظة:''' هذه الدّالة مُتقدّمة غير مطلوبة في برمجة بايثون الاعتياديّة، على عكس الدّالة <code>‎importlib‎.‎import_module‎(‎)‎</code>.
+
'''ملاحظة:''' هذه الدّالة مُتقدّمة غير مطلوبة في برمجة بايثون الاعتياديّة، على عكس الدّالة   <code>[[Python/importlib/import module|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>[[Python/builtins|builtins]]</code> وتعيين دالّة جديدة للخاصيّة <code>‎builtins‎.‎_‎_‎import‎_‎_‎‎</code> إن أردت تغيير كيفيّة تصرّف الجملة <code>import‎</code>، لكنّ هذا الأمر '''غير منصوح به بشدّة''' إذ عادةً ما تكون خُطّافات الاستيراد (انظر [https://www.python.org/dev/peps/pep-0302/ PEP 302]) وسيلةً أكثر بساطة للوصول إلى نفس الغاية ولا تُسبّب مشاكل مع الشّيفرة التي تعتمد على كون آليّة الاستيراد طبيعيّة دون تغيّر. واستعمال الدّالة <code>__import__()‎</code> مُباشرةً '''غير منصوح به''' كذلك، استعمل الدّالة <code>‎importlib‎.‎import_module‎(‎)‎</code> عوضًا عنها.
  
 
== البنية العامة ==
 
== البنية العامة ==
سطر 17: سطر 17:
 
=== <code>globals</code> ===
 
=== <code>globals</code> ===
 
مُعامل اختياريّ.
 
مُعامل اختياريّ.
 +
 
الكائنات العامّة التي تُحدّد كيفيّة تفسير الاسم في سياق حزمةٍ (package context) مُعيّنة.
 
الكائنات العامّة التي تُحدّد كيفيّة تفسير الاسم في سياق حزمةٍ (package context) مُعيّنة.
  
 
=== <code>locals</code> ===
 
=== <code>locals</code> ===
 
مُعامل اختياريّ.
 
مُعامل اختياريّ.
الكائنات المحليّة التي تُحدّد كيفيّة تفسير الاسم في سياق حزمةٍ مُعيّنة.
+
 
آليّة العمل القياسيّة لا تستخدم أبدًا هذا المُعامل، وتستخدم المُعامل <code>globals</code> فقط لتحديد سياق حزمة جملة الاستيراد <code>import‎</code>.
+
الكائنات المحليّة التي تُحدّد كيفيّة تفسير الاسم في سياق حزمةٍ مُعيّنة. آليّة العمل القياسيّة لا تستخدم أبدًا هذا المُعامل، وتستخدم المُعامل <code>globals</code> فقط لتحديد سياق حزمة جملة الاستيراد <code>import‎</code>.
  
 
=== <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>  (انظر [https://www.python.org/dev/peps/pep-0328 PEP 328] للاستزادة).
  
 
== القيمة المعادة ==
 
== القيمة المعادة ==
سطر 38: سطر 41:
  
 
== أمثلة ==
 
== أمثلة ==
على سبيل المثال، الجملة <code>import spam</code> تُنتج شيفرة بايتات (import spam) مُشابهة للشّيفرة التّالية:
+
على سبيل المثال، الجملة <code>import spam</code> تُنتج شيفرة بايتات (bytecode) مُشابهة للشّيفرة التّالية:
 
<syntaxhighlight lang="python3">
 
<syntaxhighlight lang="python3">
 
spam = __import__('spam', globals(), locals(), [], 0)
 
spam = __import__('spam', globals(), locals(), [], 0)
سطر 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/import_module|Python.importlib.import_module]].
+
إن أردت استيراد وحدة (قد تكون داخل حزمة) باسمها ببساطة، استعمل الدّالة  <code>[[Python/importlib/import module|importlib.import_module]]</code>.
  
 
== انظر أيضًا ==
 
== انظر أيضًا ==
* [[Python/standard-modules|الوحدات القياسية في بايثون]].
+
* [[Python/standard_modules|الوحدات القياسية في بايثون]].
*[[Python/importlib/import_module|Python.importlib.import_module]].
+
* الدّالة  <code>[[Python/importlib/import module|importlib.import_module]]</code>.
 
* [[Python/packages|الحزم Packages في بايثون]].
 
* [[Python/packages|الحزم Packages في بايثون]].
  

المراجعة الحالية بتاريخ 08:04، 11 يونيو 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 تُنتج شيفرة بايتات (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.

انظر أيضًا

مصادر