العودة إلى المدونة

استخدام المعاملات *args و **kwargs في الكود الخاص بك: دليل تعليمي لـ Python 3

استخدام المعاملات *args و **kwargs في الكود الخاص بك: دليل تعليمي لـ Python 3

المقدمة

Python هي واحدة من أكثر لغات البرمجة شعبية في جميع أنحاء العالم. في Python، تعد المعلمات (parameters) جزءًا من تعريفات الدوال. وهي تمكنك من تحديد وسائط (arguments) معينة للدالة. ويمكن للدالة قبول الوسيط وتطبيقه.

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

المتطلبات الأساسية

لكي تتمكن من اتباع الخطوات الواردة في الدرس التعليمي، هناك بعض المتطلبات الأساسية التي تحتاج إلى إعدادها. أولاً، يجب أن يكون لديك Python 3 مثبتًا على خادمك مع بيئة برمجة جاهزة وتعمل. تحتاج أيضًا إلى تثبيت البرنامج الخاص بنظام التشغيل المحدد لديك (Ubuntu, CentOS، Debian، وما إلى ذلك).

ما هو *args وكيف يعمل؟

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

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

كما ترى، فإن الوسائط الخاصة بنا في الدالة أعلاه هي x و y. عند استدعاء الدالة، ستستخدم أرقامًا تقابل x و y. لنفترض أننا نقوم بتمرير الأعداد الصحيحة 5 و 4 لـ x و y على التوالي:

الآن يمكننا تشغيل الكود:

المخرجات التي سنحصل عليها ستكون كما يلي:

توضح المخرجات أنه قد تم ضرب العددين الصحيحين 5 و 4. وهذا يعني أن دالة multiply(x, y) قد عملت بنجاح.

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

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

لقد قمنا ببساطة باستبدال معلمات الدالة x و y بـ *args. سيؤدي تشغيل هذا الكود إلى إعطائك حاصل الضرب لكل استدعاء دالة على النحو التالي:

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

ما هو **kwargs وكيف يعمل؟

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

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

الآن، دعنا نستدعي الدالة. كما ترى، قمنا بإضافة وسائط الكلمات المفتاحية:

تشغيل البرنامج في هذه المرحلة سيظهر لك هذا المخرج:

ومع ذلك، هناك احتمال أن يكون نوع بيانات القاموس لديك غير مرتب. يعتمد هذا إلى حد كبير على إصدار Python 3 الذي تستخدمه. على سبيل المثال، أي إصدار بعد Python 3.6 يمنحك أزواج المفاتيح والقيم بالترتيب. أي إصدار يسبق ذلك سيعرض المخرج بترتيب عشوائي. القاموس الذي تقوم بإنشائه سيُسمى kwargs. لاحظ أنه يمكنك استخدامه ومعالجته مثل أي قاموس آخر على النظام. دعنا نرى كيف يمكنك استخدام معلمة **kwargs بشكل أكبر وتطبيقها على نطاق أوسع.

في المثال التالي، سنحاول إنشاء دالة جديدة ترحب بقاموس يحتوي على أسماء. سيكون لقاموسنا النموذجي اسمان:

تشغيل البرنامج سيعطيك هذا المخرج:

على غرار المثال السابق، قد تظهر القواميس غير مرتبة. على هذا النحو، قد يتم عكس ترتيب الاسمين Casey و Sammy في بعض الحالات.

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

تشغيل البرنامج سيظهر لك هذا المخرج:

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

كيفية ترتيب الوسائط

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

  1. الوسائط الموضعية الرسمية

  2. *args

  3. وسائط الكلمات المفتاحية

  4. **kwargs

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

من ناحية أخرى، فإن استخدام هذه المعلمات مع معلمات الكلمات المفتاحية المسماة سيعطي دالتك البنية العامة التالية:

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

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

أخيرًا، سنوضح لك كيفية استخدام كلتا المعلمتين لتمرير الوسائط إلى الدوال. سنبدأ بمثال يوضح *args:

هناك ثلاث معلمات في هذه الدالة: arg_1, arg_2، و arg_3. يجب عليك إنشاء متغير وتعيينه إلى كائن قابل للتكرار (iterable). في هذه الحالة، سيكون tuple. بعد ذلك، يمكنك تمرير المتغير إلى الدالة باستخدام صيغة النجمة.

لاحظ المخرجات عند تشغيل البرنامج باستخدام python some_args.py الأمر:

من الممكن تغيير البرنامج إلى قائمة قابلة للتكرار (iterable list) نوع بيانات أيضًا مع اسم متغير مختلف. يجمع الكود التالي بين *args مع معلمة مسماة:

ستكون المخرجات على النحو التالي عند تشغيل البرنامج:

من ناحية أخرى، يمكنك تطبيق الوسائط ذات الكلمات المفتاحية باستخدام **kwargs. تأكد من إنشاء متغير يساوي قاموسًا (dictionary). يجب أن يحتوي على زوجين من المفاتيح والقيم. إليك كيفية تمرير المتغير إلى دالة تحتوي على 3 وسائط:

استخدم python some_kwargs.py الأمر مرة أخرى لتشغيل البرنامج:

الخاتمة

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

أخيرًا، إليك المزيد من الموارد من مدونتنا والتي ستساعدك على العمل بنجاح مع بايثون:

حوسبة سعيدة!

author

Pranay Kapgate

المؤلف · CloudSigma

Preslav Dobrev هو مصمم إبداعي في CloudSigma، يركز على هوية أعمال متسقة باستخدام قنوات التسويق التقليدية والمبتكرة. هو بارع في دمج الرؤية الفنية مع التسويق الاستراتيجي لخلق سرد قصصي مؤثر للعلامة التجارية.

التعليقات

لا توجد تعليقات بعد. كن أول من يعلق.