تحويل أنواع البيانات
| الدالة أو المفهوم البرمجي | آلية التحويل والتأثير في الذاكرة | مثال الشيفرة والنتيجة المتوقعة |
|---|---|---|
| الدالة int | تحول القيمة النصية الرقمية أو العدد العشري إلى عدد صحيح عن طريق بتر الكسر | كود int لـ 3.14 يعيد 3 وكود int لنص 5 يعيد 5 |
| الدالة float | تحول العدد الصحيح أو النص الرقمي إلى عدد عشري بفاصلة عائمة | كود float لـ 5 يعيد 5.0 |
| الدالة str | تحول أي نوع بيانات سواء كان رقماً أو كائناً إلى سلسلة نصية قابلة للقراءة | كود str لـ 100 يعيد نص 100 بين علامتي تنصيص |
| الدالة bool | تحول القيمة إلى منطقية حيث تعيد False مع القيم الفارغة والصفرية وتعيد True مع ما عدا ذلك | كود bool لـ 0 يعيد False |
| الدالة list | تحول الكائنات القابلة للتكرار مثل النصوص أو التوبل إلى قائمة مصفوفية مرنة | كود list للنص abc يعيد قائمة بها العناصر a و b و c |
| الدالة tuple | تحول الكائنات القابلة للتكرار كالقوائم إلى صف ثابت غير قابل للتعديل | كود tuple لقائمة يعيد العناصر داخل أقواس دائرية |
| القيم الضعيفة Falsy Values | قيم تعتبرها بايثون خاطئة منطقياً عند تحويلها وتضم الصفر والنصوص والمصفوفات الفارغة وNone | كود bool لـ قائمة فارغة يعيد False تلقائياً |
| التحويل التلقائي Implicit | قيام محرك بايثون بترقية نوع البيانات تلقائياً دون تدخل المطور لمنع فقدان دقة البيانات | كود جمع int مع float ينتج عنه float تلقائياً |
| التحويل الصريح Explicit | قيام المطور باستخدام دوال التحويل يدوياً لتغيير نوع المتغير والتحكم في سير البيانات | كود تحويل مدخلات المستخدم النصية إلى أرقام لإجراء عمليات حسابية |
تحويل أنواع البيانات (Type Casting)
1. مفهوم تحويل الأنواع في Python
تحويل أنواع البيانات (Type Casting / Type Conversion) هو عملية تغيير القيمة المخزنة من نوع بيانات معين (مثل: نص str) إلى نوع بيانات آخر (مثل: رقم صحيح int). تُعد هذه العملية حيوية جداً في البرمجة، لا سيما عند التعامل مع البيانات القادمة من مصادر خارجية مثل مدخلات المستخدمين (User Inputs)، أو قواعد البيانات، أو ملفات النص؛ حيث تصل البيانات غالباً في صيغة نصية وتحتاج إلى معالجة رقمية.
ينقسم تحويل الأنواع في بايثون إلى آليتين أساسيتين: التحويل التلقائي (Implicit) والتحويل الصريح (Explicit).
2. أنواع تحويل البيانات (Types of Conversion)
أولاً: التحويل التلقائي (Implicit Type Conversion) في هذا النمط، يقوم محرك بايثون بتحويل نوع البيانات تلقائياً دون أي تدخل من المطور. يحدث هذا عادةً عندما تجتمع أنواع بيانات مختلفة في عملية حسابية واحدة؛ حيث تقوم بايثون بترقية (Upcasting) النوع الأصغر إلى النوع الأكبر والأكثر دقة لمنع فقدان البيانات (Data Loss).
ثانياً: التحويل الصريح (Explicit Type Conversion / Casting) في هذا النمط، يقوم المطور بجبر المتغير على تغيير نوعه باستخدام دوال التحويل الجاهزة (Built-in Functions). إذا كانت القيمة غير قابلة للتحويل منطقياً، تتوقف البيئة وتُصدر خطأ من نوع ValueError.
3. دوال التحويل الصريح الأساسية (Casting Functions) الدالة int(x): تحول القيمة إلى عدد صحيح. إذا تم تمرير عدد عشري لها، فإنها تقوم ببتر (Truncate) الجزء الكسري تماماً دون تقريب.
الدالة float(x): تحول القيمة إلى عدد عشري عبر إضافة فاصلة متبوعة بـ 0 إذا كان المدخل صحيحاً.
الدالة str(x): تحول أي كائن أو رقم إلى سلسلة نصية، وهي آمنة تماماً ولا تسبب أخطاء ValueError.
الدالتان list(x) و tuple(x): تستخدمان للتحويل بين هياكل التجميع القابلة للتكرار (Iterables).
4. القيم المنطقية الضعيفة (Falsy & Truthy Values) عند استخدام دالة التحويل المنطقي bool() على الكائنات والمتغيرات، تتبع بايثون قاعدة رياضية صارمة لتصنيف القيم. تنقسم جميع القيم في بايثون إلى فئتين:
1. القيم الخاطئة منطقياً (Falsy Values)
هي قيم محددة وثابتة في نواة اللغة، وتُرجع دائماً القيمة False عند تحويلها منطقياً، وتمثل حالات الفراغ والصفرية:
الرقم الصفر: 0, 0.0, 0j
النصوص الفارغة: "" (التي لا تحتوي على أي حرف أو مسافة)
المصفوفات والهياكل الفارغة: القوائم []، التوبل ()، المجموعات {}، القواميس {}
القيمة الفارغة الخاصة: None
القيمة المنطقية الأساسية: False
2. القيم الصحيحة منطقياً (Truthy Values)
أي قيمة أخرى في بايثون بخلاف القيم المذكورة أعلاه تُعتبر Truthy وتُرجع دائماً True عند تمريرها لدالة bool()، بما في ذلك الأرقام السالبة، أو النصوص التي تحتوي على مسافة فارغة واحدة فقط " ".
| 1 | # جمع عدد صحيح (int) مع عدد عشري (float) |
| 2 | num_int = 10 # int |
| 3 | num_float = 5.5 # float |
| 4 | |
| 5 | result = num_int + num_float |
| 6 | print(result) # المخرج: 15.5 |
| 7 | print(type(result))# المخرج: <class 'float'> (تم التحويل تلقائياً) |
مثال 1: تحويل مدخلات المستخدم
| 1 | # input() دائماً تعطي str |
| 2 | age_text = input("أدخل عمرك: ") # مثلاً "25" |
| 3 | |
| 4 | # نحتاج تحويل إلى int قبل الحساب |
| 5 | age = int(age_text) |
| 6 | next_year = age + 1 |
| 7 | print(f"في السنة القادمة ستبلغ {next_year} عاماً") |
مثال 2: التحويل بين الأنواع
| 1 | # من str إلى أرقام |
| 2 | price = float("49.99") |
| 3 | quantity = int("5") |
| 4 | total = price * quantity |
| 5 | print(f"الإجمالي: {total}") |
| 6 | |
| 7 | # من أرقام إلى str |
| 8 | num = 42 |
| 9 | text = "الرقم هو: " + str(num) |
| 10 | print(text) |
| 11 | |
| 12 | # bool |
| 13 | print(bool(0)) # False |
| 14 | print(bool(1)) # True |
| 15 | print(bool("")) # False |
| 16 | print(bool("Hi")) # True |