Menu
العربية

المتغيرات في بايثون: التعريف والإسناد والتسمية

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

المتغير ما هو إلا اسم

المتغير في بايثون هو ببساطة اسم تربطه بقيمة معينة. كل ما عليك فعله هو كتابة الاسم، ثم علامة يساوي، ثم القيمة:

main.py
Output
Click Run to see the output here.

ثلاثة متغيرات، وثلاث قيم، وثلاثة أنواع مختلفة. بايثون تحتفظ بها جنبًا إلى جنب دون أي اعتراض، ولم تضطر أن تخبرها بأي شيء عن نوع هذه القيم. القيمة تأتي بعد علامة =، واسم المتغير يسبقها.

وبمجرد أن يصبح المتغير موجودًا، تستطيع استخدامه في أي مكان كنت ستضع فيه القيمة نفسها:

main.py
Output
Click Run to see the output here.

الأسماء الجيدة تجعل السطر قبل الأخير يشرح نفسه بنفسه. وهذه هي الفائدة الحقيقية من اختيار أسماء متغيرات معبّرة — كود يقرأ وكأنه شرح مكتوب.

الإسناد في بايثون ليس معادلة رياضية

في الحقيقة، هناك نقطة تُربك كثيرًا من القادمين من خلفية رياضية: علامة = في لغة بايثون لا تعني "يساوي"، بل تعني "أَسْنِد". يعني ببساطة: "خذ القيمة الموجودة بعد =، واربطها بالاسم الموجود قبلها". بايثون يحسب القيمة أولًا، ثم يقوم بعملية الإسناد.

لذلك، الكود التالي صحيح تمامًا:

main.py
Output
Click Run to see the output here.

السطر count = count + 1 لا يقول إن count يساوي count + 1 (وهذا مستحيل رياضياً)، بل يقول: احسب قيمة count + 1، ثم أعِد إسناد الناتج إلى count. فبايثون تُقيّم التعبير أولاً — 0 + 1 ينتج عنه 1 — وبعدها فقط تُحدِّث المتغير.

ستجد نفسك تكتب count = count + 1 كثيراً، ولذلك توفّر بايثون اختصاراً مفيداً: count += 1 يؤدي نفس المهمة.

إعادة الإسناد تُغيّر التسمية لا القيمة نفسها

يمكن للمتغير في بايثون أن يشير إلى قيمة مختلفة في أي وقت تشاء. القيمة القديمة لا تتغيّر، وإنما المتغير ببساطة يبدأ بالإشارة إلى شيء آخر:

main.py
Output
Click Run to see the output here.

لاحظ السطر الأخير. المتغير mood كان يحمل سلسلة نصية لسطرين، وفجأة صار يحمل عدداً صحيحاً. بايثون لم يعترض. هذا ما يسمى بـ dynamic typing في بايثون — أي أن المتغيرات ليس لها نوع ثابت، وإنما القيم هي التي لها نوع. هذه المرونة مفيدة وقت التجريب السريع، لكنها مزعجة حين يتبدّل معنى المتغير داخل دالة دون أن تنتبه. العادة الآمنة هي اختيار اسم يعكس ما تمثّله القيمة، ثم الالتزام بأن يبقى المتغير ممثّلاً لنفس الشيء طوال عمره.

قواعد تسمية المتغيرات في بايثون

تقبل لغة بايثون أي اسم للمتغير يستوفي الشروط التالية:

  • يبدأ بحرف أو بشرطة سفلية (_).
  • يتكوّن من حروف وأرقام وشرطات سفلية فقط.
  • ألا يكون من الكلمات المحجوزة في اللغة (if, for, class, return، وغيرها من الكلمات المفتاحية).

وبناءً على ذلك، هذه أسماء صالحة:

main.py
Output
Click Run to see the output here.

وهذه أسماء غير صالحة:

  • 2nd_user — لا يمكن أن يبدأ الاسم برقم.
  • user-name — الشرطة ممنوعة (بايثون تعتبرها عملية طرح).
  • class — كلمة محجوزة.
  • user name — المسافات غير مسموحة داخل الاسم.

الأسماء في بايثون حساسة لحالة الأحرف، كما تعلم: فكل من total وTotal وTOTAL يعدّ متغيرًا مستقلًا. وبايثون لن تنبهك إلى الخطأ الإملائي.

قواعد تسمية المتغيرات في بايثون (الأعراف الشائعة)

إلى جانب القواعد الصارمة، تبنّى مجتمع بايثون أعرافًا متفقًا عليها — المفسّر لا يفرضها، لكنها سائدة في كل المشاريع:

  • lower_snake_case للمتغيرات والدوال العادية: retry_count، fetch_profile.
  • UPPER_SNAKE_CASE للثوابت في بايثون: MAX_RETRIES = 5.
  • PascalCase لأسماء الأصناف (سنتناولها لاحقًا).
  • شرطة سفلية في البداية (_something) تعني أن الاسم مخصص للاستخدام الداخلي. ليس إلزامًا — مجرد عُرف.
  • شرطة سفلية في النهاية (class_) تتيح لك استخدام اسم يتعارض مع كلمة محجوزة.

التزم بهذه الأعراف وسيبدو كودك مشابهًا لما يكتبه بقية مبرمجي بايثون.

اختر اسمًا يعبّر عن المعنى

كتابة اسم المتغير لا تكلّفك شيئًا، لكن قراءته لاحقًا مكلفة. فإضافة بضعة أحرف لاختيار اسم يصف فعلًا ما تمثّله القيمة ستوفّر على القارئ القادم (وغالبًا ما يكون أنت نفسك بعد أشهر) الكثير من الحيرة.

قارن بين هذا وذاك:

main.py
Output
Click Run to see the output here.

نفس الكود وبنفس النتيجة، لكن النسخة الثانية هي الوحيدة اللي توضّح لك ايش يصير. الأسماء القصيرة مثل (i، n، x) ما فيها مشكلة داخل نطاقات صغيرة جدًا مثل عدّادات الحلقات، لكن خارج هالحالات، اكتب الاسم كامل.

الإسناد المتعدد في بايثون (استخدمه بحذر)

تتيح لك لغة بايثون إسناد نفس القيمة لأكثر من متغير في سطر واحد:

main.py
Output
Click Run to see the output here.

أو يمكنك تفكيك عدة قيم دفعة واحدة:

main.py
Output
Click Run to see the output here.

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

الخلاصة

  • الصيغة name = value هي التي تُنشئ المتغير.
  • المتغيرات في بايثون لا تحمل نوعًا، بل القيم هي التي تحمله (وهذا ما يُعرف بـ dynamic typing في بايثون).
  • أسماء المتغيرات تخضع لقواعد صارمة قليلة، وأعراف كثيرة مرنة — وكلاهما يستحق الاحترام.
  • الاسم الواضح والمُعبِّر هو أرخص نوع من التوثيق.

في الدرس القادم: ما هي أنواع البيانات في بايثون فعلًا — الأعداد الصحيحة، الأعداد العشرية، النصوص، القيم المنطقية — ولماذا يُهمّك أن تُفرّق بينها.

الأسئلة الشائعة

كيف أُنشئ متغيرًا في لغة بايثون؟

اختر اسمًا للمتغير، ثم ضع علامة = بعده، وأضف القيمة على اليمين. مثلًا age = 30 يُنشئ متغيرًا اسمه age وقيمته 30. بايثون تتعرّف على نوع البيانات تلقائيًا، فلا حاجة للإعلان عن النوع صراحةً.

ما هي قواعد تسمية المتغيرات في بايثون؟

يمكن أن يحتوي الاسم على حروف وأرقام وشرطات سفلية (_)، لكن لا يجوز أن يبدأ برقم. كما لا يمكن استخدام كلمة محجوزة مثل if أو class. الأسماء حساسة لحالة الأحرف، أي أن total وTotal وTOTAL ثلاثة متغيرات مختلفة تمامًا. والاصطلاح المتعارف عليه بين المبرمجين هو lower_snake_case.

هل يمكن أن يتغيّر نوع المتغير في بايثون؟

نعم. بايثون لغة ديناميكية التحديد للنوع (dynamically typed)، فالمتغير الذي يحمل رقمًا الآن قد يحمل نصًا في السطر التالي. هذه المرونة مريحة، لكنها قد تُربكك أحيانًا: فإذا تغيّر معنى المتغير في منتصف الدالة، فهذه إشارة قوية على أنك تحتاج لاختيار اسم جديد.

تعلّم البرمجة مع Coddy

ابدأ الآن