ประเภทในภาษาไพธอน

ประเภทในภาษาไพธอน

บทความนี้อธิบายเกี่ยวกับประเภทในภาษาไพธอน

YouTube Video

ประเภทในภาษาไพธอน

โมดูล typing ในภาษาไพธอนถูกใช้เพื่อเพิ่มตัวบ่งชี้ประเภท (type hints) เข้าสู่ภาษาไพธอน มันถูกแนะนำครั้งแรกใน Python 3.5 และถูกใช้เพื่อปรับปรุงความเข้าใจง่ายและความคงทนของโค้ด ตัวบ่งชี้ประเภทไม่ส่งผลต่อการรันโค้ด แต่ช่วยในการตรวจสอบประเภทด้วย IDEs และเครื่องมือวิเคราะห์แบบคงที่

พื้นฐานของตัวบ่งชี้ประเภท

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

1def add_numbers(a: int, b: int) -> int:
2    return a + b
3
4result: int = add_numbers(5, 10)
5print(result)  # 15

ในโค้ดด้านบน ค่า a และ b เป็นประเภทเลขจำนวนเต็ม (int) และค่าที่ฟังก์ชันคืนกลับมาก็ถูกระบุชัดเจนว่าเป็นเลขจำนวนเต็ม แม้จะมีตัวบ่งชี้ประเภทแล้วก็ตาม ประเภทก็ยังไม่ได้ถูกบังคับใช้อย่างเข้มงวด แต่จะมีการแสดงคำเตือนระหว่างการพัฒนา หากมีการไม่สอดคล้องของประเภท

ตัวบ่งชี้ประเภทที่สำคัญ

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

  • int: ตัวเลขจำนวนเต็ม
  • str: สตริง
  • float: จำนวนทศนิยม
  • bool: ค่าบูลีน
  • List: รายการ (ลิสต์)
  • Dict: ดิกชันนารี
  • Tuple: ทัพเพิล
  • Set: เซ็ต

ประเภท List

ประเภทของลิสต์ถูกกำหนดโดยใช้คลาส List คุณยังสามารถกำหนดประเภทขององค์ประกอบในลิสต์อย่างชัดเจนได้

1from typing import List
2
3def sum_list(numbers: List[int]) -> int:
4    return sum(numbers)
5
6print(sum_list([1, 2, 3]))  # 6

ในตัวอย่างนี้ องค์ประกอบทั้งหมดของลิสต์คาดว่าจะเป็นประเภท int

ประเภท Dict

ประเภทของดิคชันนารีถูกกำหนดโดยใช้ Dict ประเภทของคีย์และค่าในดิคชันนารีสามารถกำหนดได้

1from typing import Dict
2
3def get_student_age(students: Dict[str, int], name: str) -> int:
4    return students.get(name, 0)
5
6students = {"Alice": 23, "Bob": 19}
7print(get_student_age(students, "Alice"))  # 23

ในตัวอย่างนี้ ดิคชันนารีใช้ประเภท str เป็นคีย์และ int เป็นค่า

ประเภท Tuple

ทัปเปิลถูกกำหนดโดยใช้ประเภท Tuple คุณสามารถกำหนดประเภทของแต่ละองค์ประกอบในทัปเปิลได้อย่างอิสระ

1from typing import Tuple
2
3def get_person() -> Tuple[str, int]:
4    return "Alice", 30
5
6name, age = get_person()
7print(name, age)  # Alice 30

ในที่นี้ ฟังก์ชัน get_person แสดงการคืนค่าทัปเปิลที่มีสตริงและจำนวนเต็ม

ประเภท Union

ประเภท Union ใช้เพื่อระบุอย่างชัดเจนว่าสามารถใช้หลายประเภทได้

1from typing import Union
2
3def process_value(value: Union[int, float]) -> float:
4    return value * 2.0
5
6print(process_value(10))  # 20.0
7print(process_value(3.5))  # 7.0

ในตัวอย่างนี้ ฟังก์ชัน process_value ยอมรับค่าเป็น int หรือ float และคืนค่าผลลัพธ์ประเภท float

ประเภท Optional

ประเภท Optional ใช้เมื่อค่าตัวแปรอาจเป็น None มันถูกจัดเตรียมให้เป็นทางลัดสำหรับ Union[Type, None]

1from typing import Optional
2
3def greet(name: Optional[str] = None) -> str:
4    if name is None:
5        return "Hello, Guest!"
6    return f"Hello, {name}!"
7
8print(greet())  # Hello, Guest!
9print(greet("Alice"))  # Hello, Alice!

ในที่นี้ แสดงให้เห็นว่าเมื่อไม่ได้ระบุ name ค่า name จะถือว่าเป็น None

ประเภททั่วไป (Generic Types)

ประเภททั่วไปเป็นวิธีในการแสดงประเภทขององค์ประกอบในโครงสร้างข้อมูลแบบนามธรรม ในโมดูล typing คุณสามารถกำหนดประเภททั่วไปโดยใช้ TypeVar

1from typing import TypeVar, List
2
3T = TypeVar('T')
4
5def get_first_element(elements: List[T]) -> T:
6    return elements[0]
7
8print(get_first_element([1, 2, 3]))  # 1
9print(get_first_element(["a", "b", "c"]))  # a

ในตัวอย่างนี้ get_first_element เป็นฟังก์ชันที่คืนค่าองค์ประกอบแรกของลิสต์ และสามารถทำงานได้ไม่ว่าลิสต์จะมีประเภทใด

ชนิดข้อมูลแบบย่อ (Type Aliases)

ชนิดข้อมูลแบบย่อเป็นวิธีทำให้คำจำกัดความของประเภทที่ซับซ้อนง่ายขึ้นโดยการตั้งชื่อที่ชัดเจน

1from typing import List, Tuple
2
3Coordinates = List[Tuple[int, int]]
4
5def get_coordinates() -> Coordinates:
6    return [(0, 0), (1, 1), (2, 2)]
7
8print(get_coordinates())  # [(0, 0), (1, 1), (2, 2)]

ในตัวอย่างนี้ ชนิดข้อมูลแบบย่อ Coordinates ถูกกำหนดขึ้นเพื่อแสดงประเภทที่มีทัปเปิลอยู่ภายในลิสต์อย่างง่ายดาย

สรุป

โมดูล typing ใน Python มีประโยชน์มากสำหรับการปรับปรุงความอ่านง่ายและความสามารถในการบำรุงรักษาของโค้ด ด้วยการใช้คำใบ้ประเภท (type hints) อย่างเหมาะสม คุณสามารถช่วยป้องกันปัญหาประเภทไม่ตรงกันและข้อบกพร่อง โดยเฉพาะในโครงการขนาดใหญ่หรือการพัฒนาร่วมกันในทีม ประเภทเป็นเพียงเครื่องมือสนับสนุนการพัฒนาและไม่มีผลต่อพฤติกรรมขณะรันไทม์ ทำให้คงความยืดหยุ่นของโค้ดไว้

คุณสามารถติดตามบทความข้างต้นโดยใช้ Visual Studio Code บนช่อง YouTube ของเรา กรุณาตรวจสอบช่อง YouTube ด้วย

YouTube Video