0Pricing
Python Academy · درس

args وkwargs

اقبل وسائط موضعية ومسماة بأعداد متغيرة

args وkwargs درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.

مقدمة

تتيح *args و**kwargs للدوال قبول أعداد متغيرة من المعطيات الموضعية والمسماة.

ما المقصود بـ *args؟

تجمع `def f(*args)` جميع المعطيات الموضعية الإضافية في tuple باسم args.
def f(*args):
    print(args)
f(1, 2, 3)  # (1, 2, 3)

التكرار عبر *args

يعمل `for x in args: ...` لأن args عبارة عن tuple. ويمكنكم أيضًا استخدام sum(args) وmax(args) وغيرهما.
def total(*args):
    return sum(args)
print(total(1, 2, 3, 4, 5))

ما المقصود بـ **kwargs؟

تجمع `def f(**kwargs)` جميع المعطيات المسماة الإضافية في dict باسم kwargs.
def f(**kwargs):
    print(kwargs)
f(name='Alice', age=30)

استخدام **kwargs

يمكنكم الوصول إلى kwargs كما تفعلون مع أي dict: `for key, val in kwargs.items():`
def display(**kwargs):
    for k, v in kwargs.items():
        print(f'{k}: {v}')
display(x=1, y=2)

الجمع بين المعطيات العادية و*args و**kwargs

في `def f(a, b, *args, **kwargs):` تأتي المعطيات العادية أولًا، ثم *args، ثم المعطيات التي لا تُمرَّر إلا بالاسم، ثم **kwargs.
def f(a, *args, **kwargs):
    print(a, args, kwargs)
f(1, 2, 3, x=4)

تمرير المعطيات إلى دالة أخرى

تمرر `def wrapper(*args, **kwargs): return real_func(*args, **kwargs)` جميع المعطيات إلى الدالة المغلَّفة بصورة كاملة.
def real(a, b, c=0): return a+b+c
def wrapper(*args, **kwargs): return real(*args, **kwargs)
print(wrapper(1, 2, c=3))

فك الحزم باستخدام * في الاستدعاءات

يفك `*iterable` حزم أي كائن قابل للتكرار على هيئة معطيات موضعية. ويفك `**mapping` حزم dict على هيئة معطيات مسماة.
def add(a, b, c): return a+b+c
args = [1, 2, 3]
print(add(*args))

فك الحزم الموسع للكائنات القابلة للتكرار

تعطي `first, *rest = [1,2,3,4]` القيمة first=1 والقائمة rest=[2,3,4]. ويضع `*head, last = lst` العنصر الأخير في last.
first, *rest = [1, 2, 3, 4]
print(first, rest)
*head, last = [1, 2, 3]
print(head, last)

تلميحات الأنواع لـ *args و**kwargs

تحدد `def f(*args: int, **kwargs: str)` نوع كل عنصر على حدة، وليس نوع الحاوية.
def f(*args: int, **kwargs: str) -> None:
    print(args, kwargs)
f(1, 2, name='Alice')

الأنماط الشائعة

تستخدم print() نفسها *args؛ فمثلًا تطبع `print(*my_list)` كل عنصر مفصولًا بمسافة. وهذا أسلوب شائع في Python.
lst = [1, 2, 3]
print(*lst)  # 1 2 3

تحقق سريع

ما النوع الذي ينتجه *args داخل الدالة؟

مراجعة

‏*args عبارة عن tuple من المعطيات الموضعية الإضافية. و**kwargs عبارة عن dict من المعطيات المسماة الإضافية. استخدموهما لإنشاء واجهات برمجية مرنة وتمرير المعطيات إلى دوال أخرى.

تابعوا التقدم

أحسنتم! انتقلوا إلى الدرس التالي لمواصلة تقدمكم.

الأسئلة الشائعة

هل درس «args وkwargs» مجاني؟

نعم — نص درس «args وkwargs» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.

ماذا ستتعلم في «args وkwargs»؟

اقبل وسائط موضعية ومسماة بأعداد متغيرة تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟

لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «args وkwargs»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟

نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تعريف الدوال واستدعاؤها
  2. الوسائط الافتراضية والمسماة
  3. args وkwargs
  4. القيم المُعادة ونطاق الرؤية
← العودة إلى Python Academy