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

لماذا يعمل المعامل += في حين يفشل + عند استخدامه مع القوائم في بايثون؟

Blackhacker

السؤال

عندما استخدم المعامل += مع القوائم يقوم بإنشاء قائمة تحتوي على سلاسل النصية المطلوبة في حين أنه عندما أستخدم المعامل + أحصل على رسالة خطأ، فما السبب؟

>>> x = []
>>> x += "hi"
>>> x
['h', 'i']
>>> x = x + "hi"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

 

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

Recommended Posts

  • 0

هذا الخطأ يحدث بسبب خطأ بسيط للغاية في الفرق بين += و +، فعند استخدام الأولى مع قائمة فإنك تستدعي extend وليس +، وكما هو معروف فانه يمكنك استدعاء extend مع كائنات قابلة للتكرار (iterable) وأما + فيمكنك استخدامها فقط مع القوائم الأخرى.
ملاحظة: عند استخدامك لـ x += y فإن الإشارات الأخرى للقائمة سترى الاختلافات في حين أن هذا لن يحدث مع x = x + y، ولتفهم هذا الأمر بشكل أفضل أنظر إلى المثال التالي:

>>> x = ['a','b']
>>> y = ['c', d']
>>> z = x
>>> x += y
>>> z
['a', 'b', 'c', 'd']

>>> x = ['a','b']
>>> y = ['c', d']
>>> z = x
>>> x = x + y
>>> z
['a', 'b']

 

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

  • 0

يعود السبب لكون المعامل += هو عبارة عن الوسيلة الخاصة __iadd__ المعرفة ضمن الصنف "قائمة" list وهي تقوم بعمل مشابه للوسيلة "مد"(بضم الميم) extend حيث يكون المعطى في حالتنا هو السلسلة التي بعد المعامل += الذي هو في مثالك السلسلة النصية "hi"، وفي الحالة التي فشلت فيها شفرتك فيعود السبب لكون المعامل + هو عبارة عن الوسيلة الخاصة __add__ المعرفة ضمن الصنف "قائمة" list وهي تقوم بعمل لا يشابه الوسيلة "مد"(بضم الميم) extend على الإطلاق فهي تأخذ معطى هو كائن قائمة list آخر حصرا وتجمع القائمتين أو بمعنى أدق تسلسلهما.

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...