الأنواع في بايثون

الأنواع في بايثون

تشرح هذه المقالة الأنواع في بايثون۔

YouTube Video

الأنواع في بايثون

تُستخدم وحدة typing في بايثون لإدخال التلميحات النوعية في بايثون۔ تم تقديمها في الأصل في بايثون 3.5 وتُستخدم لتحسين وضوح الكود وقابليته للصيانة۔ لا تؤثر التلميحات النوعية على وقت تشغيل الكود لكنها تمكن من اختبار الأنواع باستخدام بيئات IDE وأدوات التحليل الثابت۔

أساسيات التلميحات النوعية

توضح التلميحات النوعية غرض الكود من خلال تحديد أنواع الوظائف والمتغيرات بشكل صريح۔ في المثال أدناه، يتم تحديد الأنواع للمعاملات وقيمة الإرجاع۔

1def add_numbers(a: int, b: int) -> int:
2    return a + b
3
4result: int = add_numbers(5, 10)
5print(result)  # 15

في الكود أعلاه، كلا المتغيرين a و b من نوع الأعداد الصحيحة (int)، وقيمة الإرجاع للدالة محددة أيضًا كعدد صحيح بشكل صريح۔ حتى مع التلميحات النوعية، لا يتم فرض الأنواع بشكل صارم، ولكن قد يتم عرض تحذيرات أثناء التطوير إذا كانت هناك اختلافات في الأنواع۔

التلميحات النوعية الرئيسية

تقدم وحدة typing في بايثون العديد من الفئات والوظائف لتعريف التلميحات النوعية۔ فيما يلي قائمة بالتلميحات النوعية الشائعة۔

  • int: عدد صحيح
  • str: سلسلة نصية
  • float: عدد عشري
  • bool: منطقية
  • List: قائمة
  • Dict: قاموس
  • Tuple: صف
  • Set: مجموعة

نوع List

يتم تحديد نوع القائمة باستخدام الصنف List۔ يمكنك أيضًا تحديد نوع العناصر داخل القائمة بشكل صريح۔

1from typing import List
2
3def sum_list(numbers: List[int]) -> int:
4    return sum(numbers)
5
6print(sum_list([1, 2, 3]))  # 6

في هذا المثال، يُتوقع أن تكون جميع عناصر القائمة من النوع int۔

نوع Dict

يتم تعريف نوع القاموس باستخدام Dict۔ يمكن تحديد أنواع المفاتيح والقيم۔

1from typing import Dict
2
3def get_student_age(students: Dict[str, int], name: str) -> int:
4    return students.get(name, 0)
5
6students = {"Alice": 23, "Bob": 19}
7print(get_student_age(students, "Alice"))  # 23

في هذا المثال، يستخدم القاموس str كنوع المفاتيح و int كنوع القيم۔

نوع Tuple

يتم تحديد الصفائف باستخدام نوع Tuple۔ يمكنك تحديد نوع كل عنصر في الصفيف بشكل فردي۔

1from typing import Tuple
2
3def get_person() -> Tuple[str, int]:
4    return "Alice", 30
5
6name, age = get_person()
7print(name, age)  # Alice 30

هنا، يتم عرض الدالة get_person لإرجاع صفيف يحتوي على نص وعدد صحيح۔

نوع Union

يُستخدم نوع Union للإشارة بشكل صريح إلى قبول أنواع متعددة۔

1from typing import Union
2
3def process_value(value: Union[int, float]) -> float:
4    return value * 2.0
5
6print(process_value(10))  # 20.0
7print(process_value(3.5))  # 7.0

في هذا المثال، تأخذ الدالة process_value إما int أو float كمدخل وتعيد نتيجة من النوع float۔

نوع Optional

يُستخدم نوع Optional عندما يكون من المحتمل أن تكون قيمة المتغير None۔ يتم تقديمه كاختصار لـ Union[Type, None]۔

1from typing import Optional
2
3def greet(name: Optional[str] = None) -> str:
4    if name is None:
5        return "Hello, Guest!"
6    return f"Hello, {name}!"
7
8print(greet())  # Hello, Guest!
9print(greet("Alice"))  # Hello, Alice!

هنا، يُظهر أنه عندما لا يتم تحديد name، يتم التعامل معه على أنه None۔

الأنواع العمومية

الأنواع العمومية هي طريقة لتمثيل نوع العناصر داخل بنية البيانات بشكل مجرد۔ في الوحدة typing، يمكنك تعريف الأنواع العمومية باستخدام TypeVar۔

1from typing import TypeVar, List
2
3T = TypeVar('T')
4
5def get_first_element(elements: List[T]) -> T:
6    return elements[0]
7
8print(get_first_element([1, 2, 3]))  # 1
9print(get_first_element(["a", "b", "c"]))  # a

في هذا المثال، get_first_element هي دالة تُعيد العنصر الأول من القائمة، وتعمل بغض النظر عن نوع القائمة۔

أسماء أنواع مستعارة

الاسم المستعار للنوع هو طريقة لتبسيط تعريفات الأنواع المعقدة بإعطائها اسمًا واضحًا۔

1from typing import List, Tuple
2
3Coordinates = List[Tuple[int, int]]
4
5def get_coordinates() -> Coordinates:
6    return [(0, 0), (1, 1), (2, 2)]
7
8print(get_coordinates())  # [(0, 0), (1, 1), (2, 2)]

في هذا المثال، يتم تعريف اسم مستعار للنوع Coordinates لتمثيل نوع يحتوي على صفائف داخل قائمة ببساطة۔

الملخص

وحدة typing في Python مفيدة جدًا لتحسين وضوح الكود وقابليته للصيانة.۔ من خلال الاستفادة بشكل صحيح من تلميحات الأنواع، يمكنك المساعدة في منع عدم تطابق الأنواع والأخطاء، خاصة في المشاريع الكبيرة أو تطوير الفرق.۔ الأنواع هي مجرد أداة لدعم التطوير ولا تؤثر على سلوك وقت التشغيل، مما يحافظ على مرونة الكود.۔

يمكنك متابعة المقالة أعلاه باستخدام Visual Studio Code على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔

YouTube Video