البرمجة

تكرار إضافة عنصر إلى قائمة في Python

عند تعريف دالة في Python، القيمة الافتراضية للوسيطات (arguments) تُحفظ مرة واحدة عند تعريف الدالة، وليس عند كل مرة يُستدعى فيها الدالة. في حالة دالتك foo، قمت بتعريف القيمة الافتراضية للوسيط bar كقائمة فارغة []، وعندما يتم استدعاء الدالة foo بدون تمرير قيمة للوسيط bar، يُستخدم نفس الكائن bar الذي تم تعريفه في البداية.

بمعنى آخر، عندما تقوم بتشغيل foo() لأول مرة، تُضاف “apple” إلى القائمة bar ويتم إرجاعها. عندما تُشغل foo() مرة أخرى، يُستخدم نفس الكائن bar الذي تم إنشاؤه في البداية، ولذلك تمت إضافة “apple” مرة أخرى، وهكذا.

إذا كنت ترغب في الحصول على قائمة جديدة في كل مرة تُستدعى فيها الدالة foo، يمكنك تعديل الدالة لتأخذ ذلك بعين الاعتبار، على سبيل المثال:

python
def foo(bar=None): if bar is None: bar = [] bar.append("apple") return bar

باستخدام هذا التعديل، عندما تُستدعى الدالة foo بدون تمرير قيمة للوسيط bar، سيتم إنشاء قائمة جديدة فارغة في كل مرة.

المزيد من المعلومات

عندما تقوم بتحديد القيمة الافتراضية لوسيط دالة في Python، يتم تقديم تلك القيمة في وقت تعريف الدالة، وليس في كل مرة يتم فيها استدعاء الدالة دون تحديد قيمة لهذا الوسيط. هذا يعني أن القيمة الافتراضية للوسيط تُحفظ وتُستخدم في كل مرة يتم فيها استدعاء الدالة بدون تحديد قيمة لهذا الوسيط.

في حالة دالتك foo، قمت بتعريف الوسيط bar كقائمة فارغة []، وهذه القائمة تُحفظ عند تعريف الدالة. عندما تُستدعى الدالة foo بدون تحديد قيمة للوسيط bar، يُستخدم نفس الكائن bar الذي تم تعريفه في البداية، وهذا هو السبب في أن “apple” يتم إضافته إلى نفس القائمة في كل مرة تستدعى فيها الدالة foo بدون تحديد قيمة للوسيط bar.

لحل هذه المشكلة وجعل كل مرة يتم فيها استدعاء الدالة foo تنشئ قائمة جديدة، يمكنك تعديل الدالة كما يلي:

python
def foo(bar=None): if bar is None: bar = [] bar.append("apple") return bar

باستخدام هذا التعديل، عندما تُستدعى الدالة foo بدون تحديد قيمة للوسيط bar، سيتم إنشاء قائمة جديدة فارغة في كل مرة.

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!