اذهب إلى المحتوى
  • 0

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

ahmed1990

السؤال

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

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

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 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.

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...