Ali Ali38 نشر 4 سبتمبر 2022 أرسل تقرير نشر 4 سبتمبر 2022 كنت أقوم بكتابة تابع لإضافة مصفوفة إلى أخرى. و لكن النتائج لا تأتي بالشكل الذي أتوقعه، هل يمكن ﻷحد مساعدتي في معرفة الخطأ. def f(a1, a2=[]): for i in a1: a2.append(i) return a2 a = [1, 2, 3] b = f(a) print(b) c = [1, 2, 3, 4] d = f(c) print(d) 2 اقتباس
1 Kais Hasan نشر 4 سبتمبر 2022 أرسل تقرير نشر 4 سبتمبر 2022 (معدل) الخطأ في هذا التابع هو أنك تقوم بإضافة قيمة افتراضية mutable و هذا يعني أنها قابلة للتعديل. حيث أن البايثون يقوم بحساب قيم المتحولات الافتراضية مرة واحدة فقط عند التعريف و بعدها يقوم باستعمال القيمة التي لديه، و بالتالي عندما تقوم بتعديل القيمة أنت فإنك تعدل على القيمة الأصلية. لحل هذه المشكلة يمكننا القيام بالتالي: def f(a1, a2=None): if a2 is None: a2 = [] for i in a1: a2.append(i) return a2 a = [1, 2, 3] b = f(a) print(b) c = [1, 2, 3, 4] d = f(c) print(d) بالطبع يمكنك اختصار الوقت و استعمال التابع extend الذي يقوم بما تريده بالشكل التالي: a = [1, 2, 3] b = [4, 5] a.extend(b) تم التعديل في 4 سبتمبر 2022 بواسطة Kais Hasan 1 اقتباس
0 سامح أشرف نشر 4 سبتمبر 2022 أرسل تقرير نشر 4 سبتمبر 2022 عند تشغيل السكريبت سيتم إستدعاء الدالة f وسيتم إضافة كل عنصر داخل المصفوفة a1 إلى المصفوفة a2، ثم سيعيد هذه المصفوفة، وعند إستدعاء الدالة f للمرة الثانية سوف يتم إستخدام المصفوفة a2 مرة أخرى والتي تحتوي بالفعل على كل عناصر المصفوفة a، ولحل المشكلة يجب أن نجعل قيمة المدخل a2 عبارة عن None على سبيل المثال ونتحقق من داخل الدالة أنه لم يتم تمرير أي مدخلات (أي قيمتها None وحينها نسند مصفوفة جديدة لها بالشكل التالي: def f(a1, a2=None): if a2 is None: a2 = [] for i in a1: a2.append(i) return a2 a = [1, 2, 3] b = f(a) print(b) c = [1, 2, 3, 4] d = f(c) print(d) """ OUTPUT: [1, 2, 3] [1, 2, 3, 4] """ سبب هذه المشكلة هي أن لغة بايثون لا تقوم بتغير قيمة المدخلات في كل إستدعاء للدالة. اقتباس
السؤال
Ali Ali38
كنت أقوم بكتابة تابع لإضافة مصفوفة إلى أخرى.
و لكن النتائج لا تأتي بالشكل الذي أتوقعه، هل يمكن ﻷحد مساعدتي في معرفة الخطأ.
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.