พื้นฐาน

เวอร์ชัน Python: Python 2 และ 3 มีอะไรใหม่ใน 3.10–3.15 และควรติดตั้งเวอร์ชันไหน

อัปเดต: · Skillaria.Top

เวอร์ชัน Python ที่ยังใช้งานอยู่คือ Python 3 รุ่นล่าสุดที่เสถียรคือ Python 3.15 (ออกวันที่ 9 ตุลาคม 2026) ส่วน Python 2 หมดการสนับสนุนตั้งแต่ปี 2020 เวอร์ชันใหม่ออกทุกเดือนตุลาคมและได้รับการแก้ไขประมาณห้าปี ดังนั้นโปรเจกต์ใหม่ควรใช้ Python 3 รุ่นใหม่ และตรวจเวอร์ชันของคุณได้ด้วยคำสั่ง python3 --version

ปัจจุบันภาษา Python มีสายหลักที่ยังพัฒนาอยู่เพียงสายเดียวคือ Python 3 เวอร์ชันล่าสุดที่เสถียรคือ Python 3.15 ซึ่งออกวันที่ 9 ตุลาคม 2026 ส่วน Python 2 หมดอายุการสนับสนุนอย่างเป็นทางการตั้งแต่ปี 2020 ด้านล่างจะอธิบายความต่างระหว่างเวอร์ชัน สิ่งที่เพิ่มเข้ามาในแต่ละเวอร์ชันตั้งแต่ 3.10 ถึง 3.15 ควรติดตั้งเวอร์ชันไหน และวิธีตรวจสอบว่าเครื่องของคุณใช้เวอร์ชันอะไรอยู่

เวอร์ชันของ Python ทำงานอย่างไร

หมายเลขเวอร์ชันประกอบด้วยตัวเลขสามค่า เช่น 3.15.0 ค่าแรกคือเวอร์ชันหลัก (สายของภาษา) ค่าที่สองคือเวอร์ชันย่อย ซึ่งมีฟีเจอร์ใหม่ ค่าที่สามคือหมายเลขการแก้ไข ซึ่งมีแต่บั๊กฟิกซ์ เมื่อพูดถึง «เวอร์ชันของ Python» มักหมายถึงเวอร์ชันย่อย เช่น 3.10, 3.11, 3.12 และอื่นๆ

ตั้งแต่ปี 2019 มีรอบการออกเวอร์ชันประจำปี (PEP 602) เวอร์ชันย่อยใหม่ออกทุกเดือนตุลาคม ประมาณครึ่งปีก่อนออกจริงจะมี alpha, beta และ release candidate ตามมาด้วยการแก้ไขหลังออก เช่น 3.15.1, 3.15.2 การอัปเดตระหว่างการแก้ไขเหล่านี้ปลอดภัย เพราะพฤติกรรมของภาษาในเวอร์ชันแก้ไขไม่เปลี่ยน

ที่มาของความสับสนในการค้นหาคือ «python 311» กับ «python 3.11» หมายถึงเวอร์ชันเดียวกัน คือ 3.11 เพราะหมายเลขนี้ไม่ใช่เศษส่วนทศนิยม ดังนั้น 3.10 ใหม่กว่า 3.9 และ 3.15 ใหม่กว่า 3.2

Python 2 กับ Python 3: ต่างกันอย่างไร

Python 3 ออกในปี 2008 และตั้งใจทำให้ไม่เข้ากันย้อนหลังกับ Python 2 เพื่อแก้ไขการออกแบบเก่าของภาษา โค้ดสำหรับ Python 2 จึงมักรันไม่ได้ใน Python 3 หากไม่แก้ไข เวอร์ชันสุดท้ายของสายแรกคือ 2.7 การสนับสนุนสิ้นสุดวันที่ 1 มกราคม 2020 และรุ่นสุดท้ายคือ 2.7.18 ออกในเดือนเมษายน 2020

ประเด็นPython 2Python 3
การพิมพ์print "hi" เป็นคำสั่งprint("hi") เป็นฟังก์ชัน
สตริงเป็นไบต์โดยค่าเริ่มต้น Unicode ใช้ u"..."str เป็น Unicode เสมอ ไบต์คือ bytes
การหาร7 / 2 ได้ 37 / 2 ได้ 3.5 หารแบบจำนวนเต็มด้วย 7 // 2
การรับค่าraw_input()input()
ช่วงตัวเลขrange สร้างลิสต์ xrange เป็นแบบขี้เกียจrange เป็นแบบขี้เกียจ
การสนับสนุนไม่มีตั้งแต่ 2020มีเวอร์ชันใหม่ทุกปี

หากเจอหนังสือเรียนหรือคำตอบที่เขียน print โดยไม่มีวงเล็บ แปลว่านั่นคือ Python 2 และเนื้อหาล้าสมัยแล้ว ไม่จำเป็นต้องเรียนสายนี้ในตอนนี้ เพราะไม่มีการติดตั้งในระบบใหม่ ไลบรารีส่วนใหญ่เลิกรองรับแล้ว และความรู้นี้ใช้ได้เพียงเวลาต้องย้ายโค้ดเก่า

มีอะไรใหม่ใน Python 3.10–3.15

ด้านล่างคือสิ่งสำคัญในแต่ละเวอร์ชันที่ส่งผลต่อโค้ดในชีวิตประจำวัน รายการการเปลี่ยนแปลงแบบเต็มอยู่ในส่วน What's New ของเอกสารทางการ

Python 3.10 (ตุลาคม 2021)

  • การจับคู่รูปแบบ match/case (PEP 634) ใช้แยกโครงสร้างข้อมูลแทนการต่อกันของ if/elif
  • การรวมชนิดข้อมูลด้วยเส้นแนวตั้ง int | None แทน Optional[int] (PEP 604)
  • ตัวจัดการบริบทหลายตัวในวงเล็บภายใน with เดียว
  • ข้อความแสดงข้อผิดพลาดทางไวยากรณ์ที่เข้าใจง่ายขึ้นมาก
def describe(point):
    match point:
        case (0, 0):
            return "จุดกำเนิด"
        case (x, 0):
            return f"บนแกน X: {x}"
        case _:
            return "อยู่ที่อื่น"

print(describe((3, 0)))  # บนแกน X: 3

Python 3.11 (ตุลาคม 2022)

  • ความเร็ว โครงการ Faster CPython เร่งอินเทอร์พรีเตอร์ขึ้นราวหนึ่งในสี่โดยเฉลี่ย และมากกว่านั้นในงานบางประเภท
  • ตัวชี้ตำแหน่งแม่นยำใน traceback ลูกศร ^^^^ บอกว่านิพจน์ใดในบรรทัดที่ทำให้เกิดข้อผิดพลาด (PEP 657)
  • กลุ่มข้อยกเว้นและ except* (PEP 654) และการเพิ่มหมายเหตุให้ข้อยกเว้นผ่าน add_note()
  • โมดูล tomllib สำหรับอ่านไฟล์ TOML เช่น pyproject.toml

Python 3.12 (ตุลาคม 2023)

  • ไวยากรณ์ใหม่สำหรับ generics: def first[T](items: list[T]) -> T และคีย์เวิร์ด type สำหรับนามแฝงของชนิดข้อมูล (PEP 695)
  • f-string มีไวยากรณ์เต็มรูปแบบ (PEP 701) ภายในสามารถใช้เครื่องหมายคำพูดแบบเดียวกัน ขึ้นบรรทัดใหม่ และใส่คอมเมนต์ได้
  • ลบ distutils ที่เลิกใช้แล้วออกจากไลบรารีมาตรฐาน
  • คำแนะนำในข้อผิดพลาดละเอียดขึ้น เช่น «ลืม import โมดูลหรือเปล่า?»
type Pair = tuple[int, int]

def first[T](items: list[T]) -> T:
    return items[0]

songs = ["a", "b"]
print(f"ตัวแรก: {first(songs)!r}, ทั้งหมด {len(songs)}")
print(f"{"ข้อความในคำพูด"}")  # ใช้ได้ตั้งแต่ 3.12

ส่วนคำถามที่พบบ่อยว่า «f-string ใช้ได้ตั้งแต่เวอร์ชันไหน» ตัว f-string เองมีมาตั้งแต่ Python 3.6 ส่วนอิสระในการใช้เครื่องหมายคำพูดและการขึ้นบรรทัดใหม่ภายในวงเล็บปีกกาเพิ่งมาใน 3.12

Python 3.13 (ตุลาคม 2024)

  • คอนโซลแบบโต้ตอบใหม่: มีสี แก้ไขหลายบรรทัด ประวัติคำสั่ง และคำสั่ง exit กับ help โดยไม่ต้องมีวงเล็บ
  • บิลด์ทดลองที่ไม่มี GIL (free-threaded, PEP 703) และ JIT คอมไพเลอร์ทดลอง (PEP 744)
  • ลบโมดูลที่ล้าสมัยออก เช่น cgi และ telnetlib (PEP 594)
  • ระยะเวลาการแก้ไขบั๊กของเวอร์ชันใหม่เพิ่มเป็นสองปี

Python 3.14 (ตุลาคม 2025)

  • สตริงเทมเพลต t-string: t"สวัสดี {name}" ไม่ได้คืนค่าเป็นสตริงสำเร็จรูป แต่คืนอ็อบเจกต์เทมเพลตที่จัดการได้อย่างปลอดภัย (PEP 750)
  • การประเมินคำอธิบายชนิดข้อมูลแบบหน่วงเวลา (PEP 649) ลดปัญหาเรื่องชนิดข้อมูลที่ประกาศไว้ด้านล่างของไฟล์
  • บิลด์แบบไม่มี GIL หลุดจากสถานะทดลอง และได้รับการรองรับอย่างเป็นทางการ
  • โมดูล compression.zstd การไฮไลต์ไวยากรณ์ในคอนโซล และ except A, B: โดยไม่ต้องมีวงเล็บ

Python 3.15 (9 ตุลาคม 2026)

  • การ import แบบขี้เกียจ lazy import (PEP 810): โมดูลถูกโหลดเมื่อถูกเรียกใช้ครั้งแรก ไม่ใช่ตอนเริ่มโปรแกรม ในการวัดผลของคอร์ส สคริปต์ที่ใช้ lazy import pandas เริ่มทำงานใน 14 มิลลิวินาที แทนที่จะเป็น 280 มิลลิวินาที
  • ดิกชันนารีที่แก้ไขไม่ได้ frozendict ในตัว (PEP 814)
  • การแตกโครงสร้างในคอมพริเฮนชัน: [*g for g in groups] (PEP 798)
  • โปรไฟล์เลอร์แบบสุ่มตัวอย่าง Tachyon ในไลบรารีมาตรฐาน (PEP 799)
  • UTF-8 เป็นค่าเริ่มต้นเมื่อทำงานกับไฟล์ (PEP 686) ปิดฉากปัญหาการเข้ารหัสที่ทำให้ปวดหัวบน Windows
  • คำแนะนำ «Did you mean» ใหม่ในข้อความแสดงข้อผิดพลาด
lazy import json                    # PEP 810
cfg = frozendict(limit=500)         # PEP 814
flat = [*g for g in [[1, 2], [3]]]  # PEP 798 -> [1, 2, 3]
print(flat, cfg["limit"])
# python -m profiling.sampling run app.py   # PEP 799, Tachyon

โค้ดนี้รันได้เฉพาะบน 3.15 เท่านั้น บนเวอร์ชันเก่ากว่า lazy import และการแตกโครงสร้างใน comprehension จะให้ SyntaxError ส่วน frozendict จะให้ NameError

ระยะเวลาการสนับสนุนของเวอร์ชัน Python

แต่ละเวอร์ชันอยู่ได้ราวห้าปี ช่วงแรกได้รับการแก้ไขบั๊กตามปกติและปล่อยแพตช์เป็นประจำ (ตั้งแต่ 3.13 เป็นเวลาสองปี) จากนั้นได้รับเฉพาะการแก้ไขด้านความปลอดภัยจนสิ้นอายุ หลังจากนั้นถือว่าถึงจุดสิ้นสุดอายุการใช้งาน (end-of-life) ไม่มีใครแก้ช่องโหว่ในเวอร์ชันนั้นอีก

เวอร์ชันวันที่ออกสิ้นสุดการสนับสนุนสถานะในตุลาคม 2026
2.72010มกราคม 2020ไม่ได้รับการสนับสนุน
3.9ตุลาคม 2020ตุลาคม 2025ไม่ได้รับการสนับสนุน
3.10ตุลาคม 2021ตุลาคม 2026กำลังจะสิ้นสุดการสนับสนุน
3.11ตุลาคม 2022ตุลาคม 2027เฉพาะความปลอดภัย
3.12ตุลาคม 2023ตุลาคม 2028เฉพาะความปลอดภัย
3.13ตุลาคม 2024ตุลาคม 2029แก้ไขบั๊ก
3.14ตุลาคม 2025ตุลาคม 2030แก้ไขบั๊ก
3.15ตุลาคม 2026ตุลาคม 2031ล่าสุด

สถานะปัจจุบันของแต่ละสายจะประกาศในหน้า Status of Python versions ในคู่มือนักพัฒนา Python (Python Developer's Guide) ก่อนเลือกเวอร์ชันสำหรับโปรเจกต์ที่ต้องใช้งานยาวนาน ควรตรวจสอบที่นั่น

ควรติดตั้ง Python เวอร์ชันไหน

สำหรับการเรียนและโปรเจกต์ใหม่ ให้ติดตั้งเวอร์ชันล่าสุดที่เสถียร ณ ตอนนี้คือ Python 3.15 การเลือก 3.10 เพราะ «เป็นเวอร์ชันที่พิสูจน์แล้ว» ไม่ได้ผล เพราะในตุลาคม 2026 มันหยุดรับแม้แต่การแก้ไขความปลอดภัย และการเรียนภาษาตามเวอร์ชันที่กำลังจะหมดอายุหมายถึงต้องเรียนใหม่ในภายหลัง ภายในสาย Python 3 ความเข้ากันได้ดีมาก โค้ดของเวอร์ชันเก่าแทบทั้งหมดรันบนเวอร์ชันใหม่ได้ แต่ทางกลับกันไม่จริง

มีข้อยกเว้น หากไลบรารีที่ต้องใช้ยังไม่มีแพ็กเกจสำหรับเวอร์ชันใหม่ (เกิดขึ้นได้ในสัปดาห์แรกหลังรุ่นตุลาคมกับแพ็กเกจที่มีส่วนขยายเขียนด้วย C) ให้ใช้เวอร์ชันก่อนหน้าคือ 3.14 สำหรับเซิร์ฟเวอร์ที่ต้องใช้งานยาวนาน ให้ดูเวอร์ชันจากที่เก็บของดิสโทรที่ใช้ หรือติดตั้งเวอร์ชันที่ต้องการผ่าน uv หลักการสำคัญคืออย่าเลือกเวอร์ชันที่เหลือเวลาสนับสนุนน้อยกว่าหนึ่งปี

สถานการณ์ควรติดตั้ง
เริ่มเรียนภาษาจากศูนย์เวอร์ชันล่าสุดที่เสถียร (3.15)
โปรเจกต์ใหม่ล่าสุดหรือรองลงมา
ไลบรารีไม่รองรับเวอร์ชันใหม่เวอร์ชันย่อยก่อนหน้า
โปรเจกต์เก่าบน 3.10 ลงไปวางแผนย้ายไปเวอร์ชันที่ยังได้รับการสนับสนุน
โค้ด Python 2ย้ายมาเป็น Python 3

วิธีตรวจสอบเวอร์ชัน Python

ในเทอร์มินัลใช้คำสั่งเดียวก็พอ บน macOS และ Linux มักใช้ python3 บน Windows ใช้ python หรือ launcher ที่ชื่อ py

$ python3 --version
Python 3.12.3        # เวอร์ชันเก่า ถึงเวลาอัปเดต

$ python3 -V
Python 3.15.0

บน Windows launcher แสดงทุกเวอร์ชันที่ติดตั้งไว้พร้อมกัน ส่วน uv แสดงเวอร์ชันที่มองเห็นและติดตั้งได้:

py --list
uv python list

จากภายในโปรแกรม ข้อมูลเวอร์ชันมาจากโมดูล sys ทูเพิล sys.version_info สะดวกต่อการเปรียบเทียบ เพื่อให้สคริปต์ตรวจได้เองว่าอินเทอร์พรีเตอร์เหมาะสมหรือไม่:

import sys

print(sys.version)            # สตริงเต็มพร้อมวันที่บิลด์
print(sys.version_info[:3])   # เช่น (3, 15, 0)

if sys.version_info < (3, 10):
    raise SystemExit("ต้องใช้ Python 3.10 ขึ้นไป")

หาก python3 --version แสดงเวอร์ชันที่ไม่ใช่ที่คุณติดตั้ง แปลว่ามีอินเทอร์พรีเตอร์อีกตัวอยู่ก่อนใน PATH ตรวจว่าเป็นตัวไหนได้ด้วย which python3 บน macOS และ Linux หรือ where python บน Windows

ติดตั้งหลายเวอร์ชันบนเครื่องเดียว

การมี 3.13 และ 3.15 อยู่ด้วยกันเป็นเรื่องปกติ เพราะแต่ละเวอร์ชันติดตั้งในโฟลเดอร์ของตัวเอง การจัดการผ่าน uv สะดวกที่สุด: uv python install 3.15 ดาวน์โหลดเวอร์ชันนั้น และ uv python pin 3.15 ผูกเวอร์ชันนั้นกับโปรเจกต์ผ่านไฟล์ .python-version บน Linux ไม่ควรแตะหรืออัปเดต Python ของระบบด้วยมือ เพราะยูทิลิตี้ของระบบปฏิบัติการใช้ตัวนั้นอยู่

เวอร์ชันขั้นต่ำของโปรเจกต์ระบุได้ในไฟล์ pyproject.toml ที่ช่อง requires-python เมื่อตั้งค่าไว้ ตัวติดตั้งแพ็กเกจจะไม่ยอมติดตั้งโปรเจกต์บนอินเทอร์พรีเตอร์ที่ไม่เหมาะสม

[project]
name = "expenses"
version = "0.1.0"
requires-python = ">=3.15"

สรุป

เวอร์ชัน Python ที่ใช้งานได้จริงอยู่ในสาย 3 และรุ่นล่าสุดคือ 3.15 ซึ่งมี lazy import, frozendict และ UTF-8 เป็นค่าเริ่มต้น Python 2 สิ้นสุดการสนับสนุนในปี 2020 และ 3.10 กำลังจะหมดการสนับสนุนในตุลาคม 2026 ดังนั้นควรเริ่มเรียนและเริ่มโปรเจกต์บนเวอร์ชันใหม่ ตรวจเวอร์ชันของคุณด้วย python3 --version ในทุกบทเรียนของคอร์สจะมีบล็อก «มีอะไรใหม่ใน 3.10–3.15» จึงได้เรียนรู้การเปลี่ยนแปลงของแต่ละเวอร์ชันผ่านการลงมือทำจริง

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

IDLE Python 3.10 64-bit ในเมนู Start คืออะไร?

เป็นสภาพแวดล้อมพัฒนาอย่างง่ายที่ตัวติดตั้งจาก python.org ติดตั้งมาให้ ชื่อบอกเวอร์ชันของอินเทอร์พรีเตอร์และจำนวนบิต ถ้าเห็น 3.10 แปลว่าคุณใช้เวอร์ชันที่กำลังจะหมดการสนับสนุน ควรติดตั้งเวอร์ชันใหม่

อัปเดต Python 3.12 เป็น 3.15 ทับลงไปได้ไหม?

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

ความต่างระหว่าง 64-bit กับ 32-bit คืออะไร?

เวอร์ชัน 64-bit ใช้หน่วยความจำได้มากกว่าและเหมาะกับคอมพิวเตอร์ยุคใหม่ทุกเครื่อง เวอร์ชัน 32-bit ใช้เฉพาะกับระบบเก่ามากๆ

เวอร์ชันอัลฟาและเบต้าใช้ทำอะไร?

เป็นบิลด์ก่อนออกจริงของเวอร์ชันถัดไป สำหรับทดสอบไลบรารีและโปรเจกต์ ส่วนการเรียนและการทำงานควรใช้เฉพาะเวอร์ชันสุดท้ายที่ออกอย่างเป็นทางการ

เรียนหัวข้อนี้ผ่านวิดีโอ

หัวข้อนี้สอนอย่างละเอียดพร้อมฝึกปฏิบัติในคอร์ส “Python 3.15: от новичка до профи”

ไปที่คอร์ส