ชนิดข้อมูลซับซ้อน: 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, 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” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คำอธิบายชนิดข้อมูลเบื้องต้น
- ชนิดข้อมูลซับซ้อน: List, Dict, Optional, Union
- TypeVar คลาสทั่วไป และ Protocol
- การเรียกใช้ mypy และแก้ข้อผิดพลาดด้านชนิดข้อมูล