0Pricing
Python Academy · บทเรียน

ชนิดข้อมูลซับซ้อน: List, Dict, Optional, Union

ใช้ชนิดข้อมูลทั่วไปจากโมดูล typing และ Optional/Union อย่างถูกต้อง

ชนิดข้อมูลซับซ้อน: List, Dict, Optional, Union เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ชนิดข้อมูลซับซ้อน: List, Dict, Optional, Union”

ใช้ชนิดข้อมูลทั่วไปจากโมดูล typing และ Optional/Union อย่างถูกต้อง คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “ชนิดข้อมูลซับซ้อน: List, Dict, Optional, Union” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คำอธิบายชนิดข้อมูลเบื้องต้น
  2. ชนิดข้อมูลซับซ้อน: List, Dict, Optional, Union
  3. TypeVar คลาสทั่วไป และ Protocol
  4. การเรียกใช้ mypy และแก้ข้อผิดพลาดด้านชนิดข้อมูล
← กลับไปที่ Python Academy