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

คำอธิบายชนิดข้อมูลเบื้องต้น

ใส่คำอธิบายชนิดให้ตัวแปร พารามิเตอร์ฟังก์ชัน และชนิดค่าที่ส่งกลับ

คำอธิบายชนิดข้อมูลเบื้องต้น เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คำอธิบายชนิดข้อมูลคืออะไร

คำอธิบายชนิดข้อมูลคือคำใบ้ที่ประกาศชนิดข้อมูลที่คาดหมายของตัวแปร พารามิเตอร์ และค่าที่ส่งกลับ คำอธิบายเหล่านี้ไม่ได้บังคับใช้ขณะทำงาน แต่เครื่องมือตรวจสอบชนิดข้อมูล เช่น mypy จะอ่านคำอธิบายเหล่านี้

def greet(name: str) -> str:
    return f"Hello, {name}"

result: str = greet("Alice")
print(result)

คำอธิบายชนิดของตัวแปร

ใส่คำอธิบายให้ตัวแปรระดับโมดูล ระดับคลาส หรือภายในขอบเขตของฟังก์ชันด้วยเครื่องหมายโคลอนตามด้วยชนิดข้อมูล

count: int = 0
pi: float = 3.14159
name: str = "Python"
flag: bool = True

# Annotation without assignment (declaration only)
future_value: int

คำอธิบายชนิดของพารามิเตอร์ฟังก์ชัน

ใส่คำอธิบายให้พารามิเตอร์แต่ละตัวในส่วนหัวของฟังก์ชัน ใช้ -> type เพื่ออธิบายชนิดของค่าที่ส่งกลับ

def add(a: int, b: int) -> int:
    return a + b

def repeat(text: str, times: int = 1) -> str:
    return text * times

def no_return() -> None:
    print("side effect only")

ชนิดคอลเลกชันในตัว (Python 3.9 ขึ้นไป)

ตั้งแต่ Python 3.9 ขึ้นไป สามารถใช้ชนิดข้อมูลในตัวที่เขียนด้วยตัวพิมพ์เล็กเป็นชนิดทั่วไปได้โดยตรง เช่น list[int], dict[str, int] และ tuple[int, ...]

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

def config() -> dict[str, str]:
    return {"host": "localhost", "port": "8080"}

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

Optional และ Union

X | None (Python 3.10 ขึ้นไป) หรือ Optional[X] หมายความว่าค่าอาจเป็น X หรือ None ส่วน X | Y หมายความว่าค่าอาจเป็น X หรือ Y

from typing import Optional

def find(items: list[int], target: int) -> int | None:
    return next((x for x in items if x == target), None)

# Older style:
# def find(...) -> Optional[int]:

ชนิด Union

int | str (Python 3.10 ขึ้นไป) หรือ Union[int, str] ใช้อธิบายค่าที่อาจเป็นชนิดข้อมูลใดชนิดหนึ่งจากหลายชนิด

from typing import Union

def process(value: int | str) -> str:
    return str(value)

# Older style:
# def process(value: Union[int, str]) -> str:

นามแฝงชนิดข้อมูล

กำหนดนิพจน์ชนิดข้อมูลให้กับชื่อหนึ่งเพื่อสร้างนามแฝงที่นำกลับมาใช้ใหม่ได้ ซึ่งช่วยให้อ่านโค้ดได้ง่ายขึ้น

from typing import TypeAlias

Vector: TypeAlias = list[float]
Matrix: TypeAlias = list[Vector]

def dot(a: Vector, b: Vector) -> float:
    return sum(x * y for x, y in zip(a, b))

คำอธิบายชนิด Callable

ใช้ Callable[[arg_types], return_type] เพื่ออธิบายชนิดของฟังก์ชันที่ส่งเป็นอาร์กิวเมนต์

from typing import Callable

def apply(func: Callable[[int, int], int], x: int, y: int) -> int:
    return func(x, y)

result = apply(lambda a, b: a + b, 3, 4)
print(result)  # 7

การใส่คำอธิบายให้ *args และ **kwargs

อธิบาย *args ด้วยชนิดของสมาชิก ไม่ใช่ชนิดทูเพิล และอธิบาย **kwargs ด้วยชนิดของค่า

def log(*messages: str, level: str = "INFO") -> None:
    for msg in messages:
        print(f"[{level}] {msg}")

def configure(**options: int) -> None:
    for key, val in options.items():
        print(f"{key}: {val}")

from __future__ import annotations

เพิ่มคำสั่งนำเข้านี้ไว้ด้านบนของไฟล์ เพื่อเปิดใช้การประเมินคำอธิบายชนิดข้อมูลภายหลัง ทำให้สามารถอ้างอิงชนิดข้อมูลที่ประกาศภายหลังได้โดยไม่ต้องใส่เครื่องหมายคำพูด

from __future__ import annotations

class Node:
    def __init__(self, value: int, next: Node | None = None):
        self.value = value
        self.next = next   # forward ref to Node works here

การป้องกันด้วย TYPE_CHECKING

นำเข้าชนิดข้อมูลเฉพาะขณะตรวจสอบชนิดข้อมูล ไม่ใช่ขณะทำงาน เพื่อหลีกเลี่ยงการนำเข้าวนรอบหรือการนำเข้าที่ใช้ทรัพยากรมาก

from __future__ import annotations
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from mymodule import HeavyClass

def process(obj: HeavyClass) -> None:
    ...   # HeavyClass not imported at runtime

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ไวยากรณ์คำอธิบายชนิดข้อมูลใดใช้ระบุว่าฟังก์ชันไม่ส่งคืนค่า

สรุป

อธิบายตัวแปรด้วย name: Type พารามิเตอร์ด้วย param: Type และค่าที่ส่งกลับด้วย -> Type ใช้ list[T], dict[K,V] (Python 3.9 ขึ้นไป), X | None (3.10 ขึ้นไป) และ from __future__ import annotations สำหรับการอ้างอิงชนิดข้อมูลที่ประกาศภายหลัง

คำถามที่พบบ่อย

บทเรียน “คำอธิบายชนิดข้อมูลเบื้องต้น” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “คำอธิบายชนิดข้อมูลเบื้องต้น” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “คำอธิบายชนิดข้อมูลเบื้องต้น”

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

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

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

บทเรียน “คำอธิบายชนิดข้อมูลเบื้องต้น” ใช้เวลานานแค่ไหน

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

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

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

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

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