فهم *args و **kwargs في تعريفات دالة بايثون

فهم *args و **kwargs في تعريفات دالة بايثون
فهم *args و **kwargs في تعريفات دالة بايثون

استكشاف معلمات وظيفة بايثون

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

في هذه المقالة، سوف نستكشف ما يعنيه الرمزان * (نجمة واحدة) و** (نجمة مزدوجة) عند استخدامهما في معلمات الوظيفة. سننظر أيضًا في أمثلة عملية حول كيفية استخدام *args و **kwargs للتعامل مع السيناريوهات المختلفة في التعليمات البرمجية الخاصة بك.

يأمر وصف
*args يسمح للدالة بقبول عدد متغير من الوسائط الموضعية. يتم تمرير الوسائط كصف.
**kwargs يسمح للوظيفة بقبول عدد متغير من وسائط الكلمات الرئيسية. يتم تمرير الوسائط كقاموس.
print() يقوم بإخراج الرسالة المحددة إلى وحدة التحكم أو أي جهاز إخراج قياسي آخر.
get() استرداد القيمة المرتبطة بمفتاح محدد من القاموس. إرجاع قيمة افتراضية إذا لم يتم العثور على المفتاح.
join() يسلسل عناصر عنصر قابل للتكرار (على سبيل المثال، قائمة أو مجموعة) في سلسلة واحدة، مع فاصل محدد.
f-string سلسلة حرفية منسقة تسمح بتقييم التعبيرات الموجودة داخل الأقواس المتعرجة في وقت التشغيل.

الغوص العميق في *args و **kwargs في بايثون

البرامج النصية المقدمة توضح كيفية الاستفادة منها *args و **kwargs في تعريفات دالة بايثون. يحدد البرنامج النصي الأول وظيفة foo الذي يأخذ حجتين مطلوبتين، x و y، متبوعًا بأي عدد من الوسائط الموضعية الإضافية التي يمثلها *args. عند الاتصال foo مع الوسائط الإضافية، يتم التقاطها على شكل صف وطباعتها. يسمح هذا للوظيفة بالتعامل مع أعداد مختلفة من الوسائط بأمان. الوظيفة الثانية، bar، يقبل الوسيطتين المطلوبتين وأي عدد من وسائط الكلمات الرئيسية عبر **kwargs. يتم جمع وسيطات الكلمات الرئيسية هذه في قاموس، مما يمكّن الوظيفة من معالجة المدخلات المسماة المرنة.

يقدم المثال النصي الثاني example_function و greet وظائف لمزيد من التوضيح استخدام *args و **kwargs. ال example_function يطبع كلاً من الوسائط الموضعية والكلمات الرئيسية، ويعرض مجموعتها في صفوف وقواميس، على التوالي. ال greet تسلط الوظيفة الضوء على حالة الاستخدام العملي حيث **kwargs يسمح بوسائط الكلمات الرئيسية الاختيارية، مثل رسالة ترحيب قابلة للتخصيص. عن طريق المديونية get() على ال kwargs القاموس، يمكن أن توفر الوظيفة قيمة افتراضية عندما لا يتم توفير الكلمة الأساسية للترحيب، مما يوضح مرونة وقوة استخدام هذه التركيبات في سيناريوهات العالم الحقيقي.

استخدام *args و **kwargs في وظائف بايثون

بايثون

def foo(x, y, *args):
    print("Required arguments:", x, y)
    print("Additional arguments:", args)

def bar(x, y, **kwargs):
    print("Required arguments:", x, y)
    print("Keyword arguments:", kwargs)

foo(1, 2, 3, 4, 5)
# Output:
# Required arguments: 1 2
# Additional arguments: (3, 4, 5)

bar(1, 2, a=3, b=4, c=5)
# Output:
# Required arguments: 1 2
# Keyword arguments: {'a': 3, 'b': 4, 'c': 5}

فهم استخدام *args و **kwargs

بايثون

def example_function(*args, **kwargs):
    print("Positional arguments:", args)
    print("Keyword arguments:", kwargs)

example_function(1, 2, 3, a="apple", b="banana")
# Output:
# Positional arguments: (1, 2, 3)
# Keyword arguments: {'a': 'apple', 'b': 'banana'}

def greet(name, *args, **kwargs):
    greeting = kwargs.get('greeting', 'Hello')
    print(f"{greeting}, {name}!")
    if args:
        print("Additional names:", ', '.join(args))

greet("Alice")
# Output: Hello, Alice!

greet("Alice", "Bob", "Charlie", greeting="Hi")
# Output:
# Hi, Alice!
# Additional names: Bob, Charlie

الاستخدام المتقدم لـ *args و **kwargs

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

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

الأسئلة المتداولة حول *args و **kwargs

  1. ماذا يكون *args؟
  2. يتم استخدامها لتمرير عدد متغير من الوسائط الموضعية إلى دالة.
  3. ماذا يكون **kwargs؟
  4. إنها تسمح لك بتمرير عدد متغير من وسيطات الكلمات الرئيسية إلى إحدى الوظائف.
  5. هل بإمكاني استخدم *args و **kwargs معاً؟
  6. نعم، يمكنك استخدام كليهما في نفس الوظيفة للتعامل مع أي مجموعة من الوسائط الموضعية والوسائط الرئيسية.
  7. كيف يمكنني الوصول إلى الحجج التي تم تمريرها *args؟
  8. يمكن الوصول إليها كصف ضمن الوظيفة.
  9. كيف يمكنني الوصول إلى الحجج التي تم تمريرها **kwargs؟
  10. يمكن الوصول إليها كقاموس داخل الوظيفة.
  11. لماذا سأستخدم *args؟
  12. للسماح للوظيفة بقبول أي عدد من الوسائط الموضعية، مما يعزز مرونتها.
  13. لماذا سأستخدم **kwargs؟
  14. لقبول أي عدد من وسيطات الكلمات الرئيسية، مما يجعل الوظيفة أكثر تنوعًا.
  15. يستطيع *args و **kwargs يتم تسميتها بشكل مختلف؟
  16. نعم، الأسماء هي اصطلاحات، ولكن يمكنك تسميتها بأي شيء تريده.
  17. ما هو المثال العملي للاستخدام *args؟
  18. تمرير قيم متعددة إلى دالة تلخصها.
  19. ما هو المثال العملي للاستخدام **kwargs؟
  20. إنشاء دالة تقوم ببناء قاموس من وسيطات الكلمات الرئيسية.

اختتام مع * args و ** kwargs

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

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