0Pricing
Python Academy · درس

الأنواع المعقدة: List وDict وOptional وUnion

استخدم الأنواع العامة في وحدة typing وطبّق Optional وUnion بصورة صحيحة

الأنواع المعقدة: List وDict وOptional وUnion درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.

نظرة عامة على الوحدة typing

قبل Python 3.9، كانت الأنواع العامة مثل List وDict وTuple تأتي من typing. ومنذ الإصدار 3.9، يمكنك استخدام الأنواع المضمنة مباشرةً.

from typing import List, Dict, Tuple, Optional, Union

# Python 3.9+: use list[int], dict[str,int] directly
# Python 3.8-: use typing.List[int], typing.Dict[str,int]

List وSequence

استخدم list[T] للتسلسلات القابلة للتغيير، وSequence[T] عند قبول أي تسلسل مرتب مثل القائمة أو الصف أو السلسلة النصية.

from typing import Sequence

def total(nums: list[int]) -> int:
    return sum(nums)

def first(items: Sequence[str]) -> str:
    return items[0]   # works with list, tuple, str

Dict وMapping

استخدم dict[K,V] للقواميس القابلة للتغيير، وMapping[K,V] للكائنات التي تشبه القواميس للقراءة فقط.

from typing import Mapping

def lookup(data: Mapping[str, int], key: str) -> int | None:
    return data.get(key)

result = lookup({"a": 1, "b": 2}, "a")
print(result)   # 1

تعليقات الصفوف

بطول ثابت: tuple[int, str, float]. بطول متغير: tuple[int, ...].

def point() -> tuple[float, float]:
    return (1.0, 2.0)

def first_n(n: int) -> tuple[int, ...]:
    return tuple(range(n))

# Named tuple with types:
from typing import NamedTuple
class Point(NamedTuple):
    x: float
    y: float

Optional[T]

Optional[T] اختصار لـ T | None. وهو دائمًا الخيار المناسب عندما يمكن أن يكون المعامل غير موجود.

from typing import Optional

def find_user(user_id: int) -> Optional[dict[str, str]]:
    db: dict[int, dict[str, str]] = {
        1: {"name": "Alice"}
    }
    return db.get(user_id)

أنواع Union

استخدم Union[X, Y] أو X | Y (في 3.10+) للقيم التي قد تكون من أحد أنواع متعددة.

from typing import Union

def stringify(value: Union[int, float, str]) -> str:
    return str(value)

# Python 3.10+:
def stringify2(value: int | float | str) -> str:
    return str(value)

أنواع Literal

يقيّد Literal["a","b","c"] القيمة بمجموعة محددة من القيم الحرفية.

from typing import Literal

Mode = Literal["read", "write", "append"]

def open_file(path: str, mode: Mode) -> None:
    with open(path, mode):
        pass

open_file("data.txt", "read")    # ok
# open_file("data.txt", "exec")  # mypy error

TypedDict

يضع TypedDict تعليقات على بنية القواميس بحيث يرتبط كل مفتاح بنوع محدد.

from typing import TypedDict

class User(TypedDict):
    name: str
    age: int
    email: str | None

def greet(user: User) -> str:
    return f"Hello, {user['name']}"

alice: User = {"name": "Alice", "age": 30, "email": None}

Set وFrozenSet

ضع تعليقات على المجموعات باستخدام set[T]، وعلى المجموعات غير القابلة للتغيير باستخدام frozenset[T].

def unique(items: list[int]) -> set[int]:
    return set(items)

def allowed_methods() -> frozenset[str]:
    return frozenset({"GET", "POST", "DELETE"})

Iterable وIterator

استخدم Iterable[T] لأي كائن يمكنك التكرار عليه، وIterator[T] للكائنات التي تحتوي على __next__.

from typing import Iterable, Iterator

def evens(numbers: Iterable[int]) -> Iterator[int]:
    return (n for n in numbers if n % 2 == 0)

for n in evens([1, 2, 3, 4, 5]):
    print(n)   # 2 4

Any وNoReturn

يلغي Any التحقق من الأنواع لقيمة ما. ويحدد NoReturn الدوال التي لا تعيد قيمة أبدًا، لأنها تطرح استثناءً دائمًا أو تستمر في حلقة لا نهائية.

from typing import Any, NoReturn

def accept_all(x: Any) -> None:
    print(x)

def crash(msg: str) -> NoReturn:
    raise RuntimeError(msg)   # never returns normally

تحقق سريع

ماذا يعني Optional[str]؟

مراجعة

استخدم list[T] وdict[K,V] وtuple[T,...] للمجموعات. ‏Optional[T] = T | None. استخدم Union[X,Y] أو X|Y للأنواع المتعددة. استخدم Literal للقيم المحددة، وTypedDict لبنى القواميس الموصوفة بالأنواع، وAny لإلغاء التحقق.

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

هل درس «الأنواع المعقدة: List وDict وOptional وUnion» مجاني؟

نعم — نص درس «الأنواع المعقدة: List وDict وOptional وUnion» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.

ماذا ستتعلم في «الأنواع المعقدة: List وDict وOptional وUnion»؟

استخدم الأنواع العامة في وحدة typing وطبّق Optional وUnion بصورة صحيحة تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟

لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «الأنواع المعقدة: List وDict وOptional وUnion»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟

نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات تعليقات الأنواع
  2. الأنواع المعقدة: List وDict وOptional وUnion
  3. TypeVar والفئات العامة وProtocol
  4. تشغيل mypy وإصلاح أخطاء الأنواع
← العودة إلى Python Academy