كيفية استخدام args* و kwargs** في بايثون

لقد لاحظت أن معظم مبرمجي بايثون الجدد يجدون صعوبة في اكتشاف المتغيرات السحرية *args و **kwargs.

أولاً، دعني أخبرك أنه ليس من الضروري كتابة *args أو **kwargs بل يمكنك فقط الإكتفاء ب * (العلامة النجمية) و هي بالطبع ضرورية. يمكنك أيضًا كتابة *var و **vars ولكن إتفق الجميع على كتابة *args و **kwargs ولهذا وجب عليك أنت أيضا إتباع الإتفاقية. والآن دعونا نلقي نظرة على *args .

إستخدامات *args

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

def test_var_args(f_arg, *argv):
    print("first normal arg:", f_arg)
    for arg in argv:
        print("another arg through *argv:", arg)

test_var_args('yasoob', 'python', 'eggs', 'test')

وهذا ينتج النتيجة التالية:

first normal arg: yasoob
another arg through *argv: python
another arg through *argv: eggs
another arg through *argv: test

آمل أن يكون هذا قد أزال أي ارتباك كان لديك. والآن دعونا نتحدث عن **kwargs

إستخدامات **kwargs

** kwargs يسمح لك بتمرير طول متغير للوسائط إلى دالة. يجب عليك استخدام **kwargs إذا كنت تريد التعامل مع الوسائط المسماة في إحدى الدوال. إليك مثال لتبدأ به:

def greet_me(**kwargs):
    for key, value in kwargs.items():
        print("{0} = {1}".format(key, value))

>>> greet_me(name="yasoob")
name = yasoob

يمكنك أن ترى كيف تعاملنا مع قائمة الوسائط ذات الكلمات الرئيسية في دالتنا. هذه مجرد أساسيات **kwargs ويمكنك أن ترى مدى فائدتها. الآن دعونا نتحدث عن كيفية استخدام *args و **kwargs لاستدعاء دالة بقائمة أو قاموس من الوسائط.

استخدام *args و **kwargs لاستدعاء دالة

سنرى هنا كيفية استدعاء دالة باستخدام *args و **kwargs. فقط ضع في اعتبارك أن لديك هذه الدالة الصغيرة:

def test_args_kwargs(arg1, arg2, arg3):
    print("arg1:", arg1)
    print("arg2:", arg2)
    print("arg3:", arg3)

يمكنك الآن استخدام *args أو **kwargs لتمرير الوسائط إلى هذه الدالة الصغيرة. و إليك كيفية القيام بذلك:

# أولا مع *args
>>> args = ("two", 3, 5)
>>> test_args_kwargs(*args)
arg1: two
arg2: 3
arg3: 5

# الأن مع **kwargs:
>>> kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
>>> test_args_kwargs(**kwargs)
arg1: 5
arg2: two
arg3: 3

و إذا كنت تريد استخدام كل هذه العناصر الثلاثة في الدوال، فالترتيب هو

some_func(fargs, *args, **kwargs)

متى تستخدمها؟

يعتمد الأمر حقًا على متطلباتك. حالة الاستخدام الأكثر شيوعًا هي عند إنشاء أدوات زخرفة الدوال. علاوة على ذلك، يمكن استخدامه في ترقيع القرد أيضًا. تصحيح القرد يعني تعديل بعض التعليمات البرمجية في وقت التشغيل. ضع في اعتبارك أن لديك فئة بها دالة تسمى get_info والتي تستدعي واجهة برمجة التطبيقات (API) وترجع بيانات الاستجابة. إذا أردنا اختباره فيمكننا استبدال استدعاء API ببعض بيانات الاختبار. على سبيل المثال:

import someclass

def get_info(self, *args):
    return "Test data"

someclass.get_info = get_info

أنا متأكد من أنه يمكنك التفكير في بعض حالات الاستخدام الأخرى أيضًا.


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

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك تعليقاً

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

Scroll to Top

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

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

Continue reading