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

السؤال

نشر

 المثال في الفيديو:

a = 5
b = 10
a, b = b, a

الشخص الذي يشرح الدرس في اليوتوب قال:

في البرمجة الجزء الذي على اليمين هو الذي يتم تنفيذه أول (على يمين إشارة المساواة)

حسب فهمي: مفسر بايثون يقرأ سطر سطر من اليسار إلى اليمين ، يعني حسب فهمي ، سوف يتم إنشاء المتغير (a) ، ثم سوف يتم وضع القيمة (5) بداخله و يتم الحفظ بالذاكرة.

لكن الشخص يقول: مثلا في السطر الأول ، أنا أوجدت الرقم (5) ثم حجزت مكان في الذاكرة ، سميته بحرف (a) و حطيت فيه الرقم (5) ، لم أفهم هذا الجزء ؟!

أرجوا مساعدتي في فهم هذا الأمر مع جزيل الشكر

Recommended Posts

  • 0
نشر

 القاعدة البرمجية الثابتة في عملية التعيين هي معالجة ما يوجد على يمين إشارة =، وعندما تنتهي وتصبح لديك قيمة جاهزة، يتم ربطها بالمتغير الذي على اليسار.

وبالنسبة للذاكرة ففي لغات برمجة أخرى مثل C أو C++، يُنظر للمتغير على أنه صندوق في الذاكرة تضع فيه القيمة، أما في بايثون، فالأمر مختلف وأشبه بالبطاقات اللاصقة Labels:

  1. مفسر بايثون يرى الرقم 5 على اليمين أولاً.
  2. يقوم بإنشاء كائن في الذاكرة وهو كائن رقمي قيمته 5.
  3. ثم ينظر لليسار ويجد الحرف a، فيعتبر a مجرد لاصقة أو اسم مستعار ويقوم بلصقه على الرقم 5.

 

  • 0
نشر

هناك فرق بسيط بين طريقة قراءة الكود وطريقة تنفيذ عملية الإسناد (Assignment) وطريقة تخزين البيانات في الذاكرة.

فمثلا في السطر الأول لديك a = 5 هنا :

  • الخطوة الأولى هى تحديد القيمة 5 : حيث يتعامل بايثون مع الرقم 5 بوصفه عدد صحيح من النوع int. ويكون هذا العدد متاح لتستخدمه في عملية الإسناد.
  • الخطوة الثانية وهى الحصول على كائن يمثل العدد : حيث يمثل العدد 5 كائن في بايثون. ويحتاج الكائن إلى ذاكرة ولكن لا يشترط أن ينشئ بايثون كائن جديد في كل مرة تكتب فيها الرقم 5 فقد يعيد استخدام كائن موجود.
  • الخطوة الثالثة وهى ربط الاسم a بالكائن : حيث يربط بايثون الاسم a بالكائن الذي يمثل العدد 5 بحيث يمكنك الوصول إلى القيمة باستخدام هذا الاسم.

ولاحظ هنا اني وضحت انه تم ربط الاسم بالقيمة وليس بالضرورة حجز مكان جديد في الذاكرة وتسميته a كما لو كان الاسم نفسه صندوق يحتوي الرقم.

حيث هذه نقطة مهمة في بايثون فالمتغير هو اسم يشير إلى كائن وليس صندوق يجب أن يحتوي نسخة مستقلة من القيمة.

اما بخصوص هل يقرأ بايثون من اليسار إلى اليمين أم ينفذ اليمين أولا هنا يوجد فرق بين أمرين:

  • قراءة وتحليل الكود: فبايثون يعالج صياغة السطر وفق قواعد اللغة البرمجية.
  • تنفيذ عملية الإسناد: في الإسناد العادي يتم تقيم الجزء الأيمن أولا ثم يتم إسناد النتيجة إلى الاسم الموجود في الجزء الأيسر.

إذا ليس المقصود أن بايثون يتجاهل الطرف الأيسر أو يبدأ قراءة النص من اليمين بل المقصود أن تقييم قيمة الطرف الأيمن يسبق إسنادها إلى الطرف الأيسر.

ونأتي للسطر الأخير لديك a, b = b, a هنا :

الخطوة الأولى: تقييم الطرف الأيمن بالكامل b, a و قيمة b هي 10 و قيمة a هي 5 . إذا النتيجة التي تم تقييمها هي مجموعة من القيم بالترتيب التالي:

(10, 5)

والخطوة الثانية هى إسناد القيم إلى الطرف الأيسر :

a, b = (10, 5)

إذا يحصل الاسم a على القيمة 10 و يحصل الاسم b على القيمة 5.

  • 0
نشر

فهمك جزئيًا صحيح، والمعلّم أيضًا محق القراءة شيء، والتنفيذ شيء آخر مفسر بايثون فعلًا يقرأ الملف سطرًا بسطر من الأعلى إلى الأسفل. هذا صحيح. لكن داخل السطر الواحد الذي فيه علامة =، الترتيب هو أولًا يُحسب (يُقيَّم) الطرف الأيمن ثم تُوضع النتيجة في الاسم الموجود على الطرف الأيسر يعني = ليست مثل "يساوي" في الرياضيات، بل معناها: "خذ نتيجة اليمين وضعها في اليسار".

مثال يوضح ذلك 

x = 3
x = x + 1

في السطر الثاني، لو كان التنفيذ من اليسار أولًا لما عرفنا ماذا نفعل بـ x. لكن بايثون تحسب x + 1 أولًا (فتصبح 4)، ثم تضع النتيجة في x.

ماذا يقصد المعلّم بـ "أوجدت الرقم 5 ثم حجزت مكانًا" عند تنفيذ

a = 5

بايثون تُنشئ كائنًا (object) في الذاكرة قيمته 5 ثم بايثون تجعل الاسم a يشير إلى ذلك الكائن فالمعلّم يقصد أن الرقم 5 يوجد أولًا في الذاكرة، ثم يربط به الاسم a. وهذا يتوافق مع قاعدة "اليمين أولًا".

a = 5
b = 10
a, b = b, a

السطر 1: a يشير إلى 5 السطر 2: b يشير إلى 10 السطر 3 (هنا الفكرة) الطرف الأيمن أولًا: b, a تُقيَّم إلى القيمتين (10, 5)، أي تُحفظ القيمتان مؤقتًا ثم الطرف الأيسر: a يُربط بالقيمة الأولى 10، وb يُربط بالقيمة الثانية 5.

النتيجة: a = 10 و b = 5.

لماذا مهم أن اليمين ينفذ أولًا هنا لأنه لو نفّذنا بالتتابع بدون حفظ القيم أولًا، لحدثت مشكلة:

a = b   # الآن a = 10
b = a   # a أصبحت 10 أصلًا، فتصبح b = 10 أيضًا!

ضاعت القيمة الأصلية لـ a. أما في بايثون فالطرف الأيمن (b, a) يُحسب كاملًا أولًا ويُحفظ، وبعدها فقط يتم التوزيع على اليسار، فلا تضيع أي قيمة.

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...