Fahmy Mostafa نشر 20 يونيو 2021 أرسل تقرير نشر 20 يونيو 2021 عندما أقوم بإستدعاء دالة وتقوم هذه الدالة بالتعديل على المدخلات لإستخدامها مرة أخرى، لا يتم تطبيق هذه التغيرات على المتغيرات نفسها، فعلى سبيل المثال: def f(x, y): x = 1 y.append(3) print('In f():', x, y) x = 0 y = [0,1,2] print('Before:', x, y) f(x, y) print('After: ', x, y) تكون النتيجة كالتالي: Before: 0 [0, 1, 2] In f(): 1 [0, 1, 2, 3] After: 0 [0, 1, 2, 3] لماذا لم يتم تطبيق هذه التغيرات على المتغيرات المدخلة إلى الدالة f؟ 1 اقتباس
2 ريم المهدي نشر 20 يونيو 2021 أرسل تقرير نشر 20 يونيو 2021 لتعديل المتغيرات داخل الدوال أو أي موقع في البرنامج يجب أن نجعل المتغير مقروء لكل أجزاء البرنامج، يمكننا ذلك عن طريق إستخدام الكلمة المحجوزة global والتي نعرفها قبل تغيير قيمة x داخل الدالة f، لكن لنقوم بإستخدامها لا يجب تمريرها بالدالة فهي أصبحت مقروءة بصورة أتوماتيكية، راجع البرنامج التالي: def f(y): global x x = 1 y.append(3) print('In f():', x, y) x = 0 y = [0,1,2] print('Before:', x, y) f(y) print('After: ', x, y) لاحظ للتغيير بداخل الدالة f و جعل x متغير عام مرئي بداخل الدالة و يمكن الوصول لموقعه في الذاكرة و التعديل عليه، و من ثم إسناد قيمة x الجديدة، يجب أيضاً أن تنتبه لمسح x من إستدعاء الدالة f في السطر رقم 10. بالتالي النتيجة تصبح: Before: 0 [0, 1, 2] In f(): 1 [0, 1, 2, 3] After: 1 [0, 1, 2, 3] 2 اقتباس
0 محمد أبو عواد نشر 20 يونيو 2021 أرسل تقرير نشر 20 يونيو 2021 عند استدعاء الدالة ، تربط بايثون معاملات الدالة بأي كائنات تقوم بتمريرها في نطاق ال caller, يمكن أن تكون الكائنات قابلة للتغيير مثل القوائم أو غير قابلة للتغيير مثل الأعداد الصحيحة والنصوص, في المثال الذي قمت بارفاقه لديك متغيرين, المتغير x وهو عبارة عن عدد و y وهي عبارة عن قائمة , عند تمرير المتغيرين الى الدالة سوف يتم ربط هذه المتغيرات بمعاملات الدالة وبالتالي أي تغيير يطرأ على القوائم سوف يتم التأثير على المتغير الذي تم تمريره 1 اقتباس
0 عبدالله عبدالرحمن11 نشر 20 يونيو 2021 أرسل تقرير نشر 20 يونيو 2021 لأنك عندما تقوم بالتعديل على المتغيرات داخل الدالة فانت تقوم بتعديل متغيرات محلية local نسخة من المتغيرات الخارجية global ، والمتغيرات الخارجية global تبقى كما هي ، أي عندما يتم تمرير المتغيرات الى الدوال يتم إنشاء نسخة من هذه المتغيرات ولا يتم تعديل المتغيرات الأصلية اما إذا أردت تغيير المتغييرات الخارجية global فيجب عليك إضافة الكلمة المحجوزة global لكي تقوم بتعديل المتغيرات الأصلية ، ولا تقوم بعمل نسخة محلية ، كما في الكود الآتي def f(): global x x = 1 global y y.append(3) print('In f():', x, y) x = 0 y = [0,1,2] print('Before:', x, y) f() print('After: ', x, y) 1 اقتباس
السؤال
Fahmy Mostafa
عندما أقوم بإستدعاء دالة وتقوم هذه الدالة بالتعديل على المدخلات لإستخدامها مرة أخرى، لا يتم تطبيق هذه التغيرات على المتغيرات نفسها، فعلى سبيل المثال:
تكون النتيجة كالتالي:
لماذا لم يتم تطبيق هذه التغيرات على المتغيرات المدخلة إلى الدالة f؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.