شرح كامل لمعلمات بايثون: موضعية، مفتاحية، *args و **kwargs

1. ما هو معامل (الوسيط) في بايثون؟

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

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

الدالة هي مجموعة من الأوامر التي تنفذ مهمة معينة. المعامل هو البيانات المدخلة التي تُمرَّر إلى الدالة، وتُستخدم كما يلي.
def greet(name):
    print(f"مرحبًا،{name}!")
في هذا المثال، من خلال تمرير معامل name أي اسم اختياري، يمكن عرض رسالة مخصصة.
greet("佐川")  # الإخراج: مرحبًا، 佐川!

2. أساسيات المعاملات في بايثون

بعد ذلك، سنستعرض طريقة استخدام المعاملات في بايثون من منظور المعاملات الموضعية، المعاملات بالكلمة المفتاحية، والمعاملات الافتراضية.

المعاملات الموضعية وأهميتها

المعاملات الموضعية تُنقل إلى معلمات الدالة وفقًا للترتيب الذي تم تحديده عند استدعاء الدالة.
def add(a, b):
    return a + b

result = add(5, 3)  # النتيجة: 8

استخدام المعاملات بالكلمة المفتاحية

باستخدام المعاملات بالكلمة المفتاحية، يمكنك تمرير القيم إلى الدالة صراحةً دون القلق بشأن ترتيب المعاملات.
def introduce(name, age):
    print(f"أنا {name}. عمري {age} سنة.")

introduce(age=25, name="ساغاوا")  # الإخراج: أنا ساغاوا. عمري 25 سنة.

استخدام المعاملات الافتراضية

من خلال تعيين معاملات افتراضية، يمكنك استخدام القيم الافتراضية عندما يتم حذف المعاملات.
def greet(name="ضيف"):
    print(f"مرحبًا، {name}!")

greet()  # الإخراج: مرحبًا، ضيف!

ترتيب المعاملات

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

3. المتغيرات ذات الطول المتغير في بايثون (*args و **kwargs)

*args طريقة الاستخدام

*args تُستخدم لتمرير عدد غير محدد من المعاملات الموضعية إلى الدالة. هذا يتيح جعل الدالة أكثر عمومية.
def print_numbers(*args):
    for number in args:
        print(number)

print_numbers(1, 2, 3)  

**kwargs طريقة الاستخدام

**kwargs باستخدامه يمكن استلام أي معلمات مفتاحية على شكل قاموس.
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="ساگاوا", age=30, job="كاتب")  

الدمج بين *args و **kwargs

*args و **kwargs من خلال دمجهما يمكن إنشاء دالة مرنة تستقبل كل من المعاملات الموضعية والمعاملات المفتاحية.
def process_data(*args, **kwargs):
    total = sum(args)
    print(f"المجموع: {total}")
    for key, value in kwargs.items():
        print(f"{key}: {value}")

process_data(1, 2, 3, name="ساگاوا", age=30)

4. تطبيقات المتغيرات واستخداماتها

أمثلة تطبيقية عملية: معالجة معلمات API

في استدعاءات API، يلزم معالجة المعلمات الديناميكية. *args و **kwargs يمكنك التعامل بمرونة مع عدة معلمات.
def api_call(endpoint, **params):
    print(f"نقطة النهاية API: {endpoint}")
    for key, value in params.items():
        print(f"{key}: {value}")

api_call("/user", id=123, action="view")

تطبيقات معالجة البيانات الضخمة

حتى في الدوال التي تعالج كميات كبيرة من البيانات، يمكنك باستخدام *args التعامل بكفاءة مع المتغيرات ذات الطول المتغير.

5. معالجة الأخطاء والتحقق من صحة المعاملات

معالجة الأخطاء المتعلقة بعدد المعاملات

إذا كان عدد المعاملات التي تتوقعها الدالة غير كافٍ، يمكن من خلال معالجة الأخطاء منع تعطل البرنامج.
def add_numbers(*args):
    if len(args) < 2:
        raise ValueError("يجب توفير ما لا يقل عن معاملين")
    return sum(args[:2])

التحقق من نوع البيانات

من خلال فحص نوع المعاملات، يمكنك منع الأخطاء غير المتوقعة.
def multiply(a, b):
    if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
        raise TypeError("المعاملات يجب أن تكون أعدادًا")
    return a * b

معالجة الأخطاء باستخدام try-except

باستخدام بنية try-except، يمكنك التقاط الأخطاء ومعالجتها بشكل مناسب.
def divide(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        return "لا يمكن القسمة على الصفر"
    except TypeError:
        return "يرجى إدخال قيمة عددية"
    return result

6. ملخص

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

النقاط الرئيسية:

  • الأساسيات للمعاملات الموضعية، المعاملات المسماة، والمعاملات الافتراضية
  • *args و **kwargs لتعريف دوال مرن
  • أهمية معالجة الأخطاء والتحقق من صحة المعاملات
بناءً على هذه المعرفة، ستتمكن من إنشاء كود بايثون مرن وقوي يمكن الاستفادة منه في العمل العملي.
侍エンジニア塾