• 0

ما الفرق بين * و ** في معاملات الدالة في البايثون ؟

قمت اليوم بالإطلاع على عدة مشاريع مكتوبة بلغة البايثون 3، ووجدت شيء غريب وهو وضع * أو ** أمام معامل في الدالة كما في المثال التالي:

def foo(param1, *param2):
def bar(param1, **param2):

فما معنى هذه النجوم ؟ وما الفرق بينها ؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

الفرق أن **name تستقبل قاموس يحتوي على جميع مفاتيح المعاملات بينما *name تستقبل tuple يحتوي على المعاملات، فمثلا لنفترض أن لدينا الدالة التالية:

def cheeseshop(kind, *arguments, **keywords):

print("-- Do you have any", kind, "?")

print("-- I'm sorry, we're all out of", kind)

for arg in arguments:

print(arg) print("-" * 40)

keys = sorted(keywords.keys())

for kw in keys:

print(kw, ":", keywords[kw])

وقمنا باستدعائها على الشكل التالي:

cheeseshop("Limburger", "It's very runny, sir.", "It's really very, VERY runny, sir.", shopkeeper="Michael Palin", client="John Cleese", sketch="Cheese Shop Sketch")

فسوف تقوم بطباعة التالي:

-- Do you have any Limburger ?--

I'm sorry, we're all out of Limburger

It's very runny, sir.

It's really very, VERY runny, sir.

----------------------------------------

client : John Cleese

shopkeeper : Michael Palin

sketch : Cheese Shop Sketch

 

لاحظ أننا قد قمنا بفرز القاموس عن طريق sorted وإذا لم تقم بهذا فسوف تنتج مشاكل في الترتيب ولاحظ أيضا أنه يجب وضع *name قبل **name.

للمزيد من المعلومات أنصحك بزيارة التوثيق الرسمي

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن