⚠️لماذا يجب عليك تجنب استيراد* في بايثون 🐍

اليوم، نحن على وشك التعمق في عالم بايثون الرائع ومناقشة حجر العثرة المشترك للمبتدئين وحتى المبرمجين المتمرسين – وهو استخدام import *. بحلول نهاية هذا الدرس ستفهم لماذا قد يشكل الإفراط في استخدام هذه العبارة مشكلة وكيفية التنقل في طريقك نحو تعليمات برمجية أكثر وضوحًا وأكثر كفاءة وموثوقية.

ماذا يعني import * ؟

في لغة بايثون، عبارة import * تُستخدم لاستيراد جميع الدوال والفئات والمتغيرات من وحدة نمطية أخرى. إنه مشابه لقول “أعطني كل ما لديك!” من الوحدة التي تقوم باستيرادها إلى الكود الخاص بك. يمكن أن يؤدي ذلك إلى تبسيط كتابة التعليمات البرمجية، خاصة عند التعامل مع الوحدات التي تحتوي على عدد كبير من الدوال أو الفئات.

أثناء استخدام import * قد يبدو وكأنه اختصار مفيد على المدى القصير، إلا أنه غالبًا ما يؤدي إلى تعليمات برمجية يمكن أن تكون مربكة ومشكلات في أسوأ الأحوال. باستخدام import *، يتم استيراد جميع الدوال والفئات من وحدة أخرى إلى مساحة الاسم الحالية الخاصة بك مما قد يتسبب في تضارب الأسماء وتصحيح الأخطاء.

إن فهم سبب عدم كون import * ممارسة موصى بها يعد خطوة مهمة نحو إتقان لغة بايثون. فهو يساعدك على تطوير عادات برمجة جيدة، ويشجع على فصل الاهتمامات، ويسهل قراءة التعليمات البرمجية وصيانتها. علاوة على ذلك، ستكون مشاريعك أكثر موثوقية حيث يقل خطر حدوث أخطاء أثناء التشغيل بسبب تعارض الأسماء بشكل كبير.

دعونا نتعمق في البرمجة ونرى كيف يمكن أن يؤثر استخدام import * على مشاريع بايثون الخاصة بنا.

كيف تعمل import *

لنبدأ باستخدام import * في برنامج نصي أساسي. خذ بعين الاعتبار الملف example_module.py بالمحتوى التالي:

def greet(name):
    return "Hello, " + name
def farewell(name):
    return "Goodbye, " + name

يمكنك استخدام import * لاستيراد كل شيء من الوحدة:

from example_module import *
print(greet("Coder"))
print(farewell("Coder"))

المشكلة

تنشأ مشكلة import * عندما تحتوي وحدتان أو أكثر على دوال أو فئات بنفس الاسم:

# another_module.py
def greet(name):
    return "Hey, " + name

الآن، إذا حاولنا استخدام import * لكلا الوحدتين:

# main.py
from example_module import *
from another_module import *
print(greet("Coder"))

ستكون النتيجة “Hey, Coder” لأن الدالة من Another_module قامت بالكتابة فوق الدالة الأولى دون سابق إنذار. هذا أحد مشاكل import * والتي يمكن أن تشكل صداعًا كبيرًا لتصحيح الأخطاء.

كيفية الاستيراد بشكل صحيح

بدلاً من استخدام import *، يمكنك استيراد وحدات كاملة أو الميزات التي تحتاجها فقط، كما يلي:

# main.py
import example_module
import another_module
print(example_module.greet("Coder"))
print(another_module.greet("Coder"))

و الأفضل من ذلك، استيراد الميزات التي تحتاجها فقط:

# main.py
from example_module import greet
print(greet("Coder"))

يؤدي القيام بذلك إلى ضمان عدم ظهور أي تعارضات بسبب الكتابة الفوقية.

استيراد دوال محددة

عند العمل باستخدام وحدات أكبر، غالبًا ما يكون من المفيد استيراد الدوال المحددة التي تحتاجها فقط. فيما يلي مثال لكيفية القيام بذلك:

from example_module import greet
print(greet("Coder"))

الآن، إذا حاولنا استدعاء دالة لم نستوردها على وجه التحديد، فإن بايثون ستلقي خطأً:

from example_module import greet
print(farewell("Coder"))  # NameError: name 'farewell' is not defined

الاستيراد باستخدام الأسماء المستعارة

يمكن أن تكون هناك مواقف تكون فيها أسماء الدوال طويلة أو تتعارض مع أسماء المتغيرات . توفر بايثون طريقة للاستعارة للدوال المستوردة:

from example_module import greet as hello
print(hello("Coder"))

استيراد دوال متعددة

يمكنك استيراد دوال متعددة في سطر واحد من التعليمات البرمجية:

from example_module import greet, farewell
print(greet("Coder"))
print(farewell("Coder"))

استيراد وحدات كاملة

يمكنك استيراد الوحدة بأكملها بدلاً من الدوال الفردية. بهذه الطريقة، لن يكون هناك أي تعارض في الأسماء في مساحة الاسم الخاصة بك:

import example_module
print(example_module.greet("Coder"))
print(example_module.farewell("Coder"))

فهم أمر الاستيراد

في بايثون، ترتيب الواردات مهم. من المهم أن نفهم أن المزيد من الواردات يمكن أن تحل محل الواردات السابقة:

from example_module import greet  # returns "Hello, ..."
from another_module import greet  # returns "Hey, ..."
print(greet("Coder"))  # output: "Hey, Coder"

في هذا المثال، تحل دالة greet الأخيرة المستوردة محل الدالة الأولى. وهذا يؤكد ضرورة تجنب الاستيراد المفرط مثل import *.

إن إتقان لغة بايثون يفتح الأبواب أمام إمكانيات واسعة – سواء كان ذلك إنشاء ألعاب جذابة، أو صياغة الذكاء الاصطناعي المتطور، أو حل مشكلات علوم البيانات المعقدة. من خلال تجنب المخاطر الشائعة مثل الإفراط في استخدام import *، فإنك تضمن تشغيل مشاريع Python الخاصة بك بسلاسة وكفاءة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading

Scroll to Top