الأنواع المعقدة: 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, strDict و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: floatOptional[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 errorTypedDict
يضع 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 4Any و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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات تعليقات الأنواع
- الأنواع المعقدة: List وDict وOptional وUnion
- TypeVar والفئات العامة وProtocol
- تشغيل mypy وإصلاح أخطاء الأنواع