ชีตสรุป

Python cheat sheet: ไวยากรณ์ Python คำสั่ง และฟังก์ชันในตัวในรูปแบบตาราง

อัปเดต: · Skillaria.Top

ไวยากรณ์ Python อาศัยการเยื้องย่อหน้าแทนวงเล็บปีกกา บล็อกหลังเครื่องหมายโคลอนจะเยื้องเข้าไป 4 ช่องว่าง พื้นฐานคือตัวแปรที่ไม่ต้องประกาศชนิด เงื่อนไข if/elif/else ลูป for และ while ฟังก์ชัน def และฟังก์ชันในตัวอย่าง print, len, range, input, type รวมถึงเมธอดของสตริง ลิสต์ และดิกชันนารี

Cheat sheet นี้รวมทุกอย่างที่ควรมีไว้ใกล้มือในไม่กี่เดือนแรกไว้ในหน้าเดียว ได้แก่ ไวยากรณ์ Python ลูป ฟังก์ชันในตัว เมธอดของสตริง ลิสต์ และดิกชันนารี รวมถึงคำสั่งเทอร์มินัล ทุกตารางเป็นเอกสารอ้างอิงสั้นๆ พร้อมตัวอย่างที่นำไปวางใน REPL ได้ทันที

พื้นฐานไวยากรณ์ Python

จุดเด่นหลักของภาษาคือบล็อกถูกกำหนดด้วยการเยื้องย่อหน้า ไม่ใช่วงเล็บ หลังบรรทัดที่มีเครื่องหมายโคลอน (if, for, def, class) บรรทัดถัดไปจะเยื้องเข้าไป 4 ช่องว่าง ห้ามผสมแท็บกับช่องว่าง ไม่เช่นนั้นจะได้ IndentationError

โครงสร้างตัวอย่างคำอธิบาย
คอมเมนต์# ข้อความทุกอย่างหลัง # จนถึงท้ายบรรทัดจะถูกข้าม
ตัวแปรage = 25ไม่ประกาศชนิด ค่าเป็นตัวกำหนดชนิดเอง
การกำหนดหลายค่าa, b = 1, 2การแตกค่า (unpacking) สลับค่าได้ด้วย a, b = b, a
การแสดงผลprint("สวัสดี", name)อาร์กิวเมนต์คั่นด้วยช่องว่าง
การรับค่าs = input("ชื่อ: ")คืนค่าเป็นสตริงเสมอ
f-stringf"{name}: {price:.2f}"แทรกนิพจน์และกำหนดรูปแบบ
คำอธิบายชนิดcount: int = 0เป็นคำแนะนำให้ IDE และตัวตรวจ ไม่ถูกตรวจตอนรัน
บล็อกว่างpassตัวยึดที่ใช้ในที่ที่ไวยากรณ์ต้องการเนื้อหา
การ importfrom math import sqrtนำเข้าโมดูลหรือชื่อจากโมดูล

ชนิดข้อมูล

ชนิดค่าคงที่เปลี่ยนแปลงได้
int42, 1_000_000ไม่
float3.14, 1e-3ไม่
boolTrue, Falseไม่
str"ข้อความ", 'ข้อความ', """หลายบรรทัด"""ไม่
list[1, 2, 3]ได้
tuple(1, 2), (1,)ไม่
dict{"a": 1}ได้
set{1, 2} ว่างใช้ set()ได้
NoneTypeNone—

ตัวดำเนินการ

กลุ่มตัวดำเนินการตัวอย่าง → ผลลัพธ์
เลขคณิต+ - * / // % **7 // 2 → 3, 7 % 2 → 1, 2 ** 10 → 1024
การเปรียบเทียบ== != < > <= >=1 < x < 10 — การเปรียบเทียบต่อเนื่อง
ตรรกะand or notx or "ค่าเริ่มต้น"
การเป็นสมาชิกin, not in"a" in "abc" → True
ความเป็นอัตลักษณ์is, is notx is None
การกำหนดค่า+= -= *= /=, :=if (n := len(s)) > 10: ...

เงื่อนไขและการจับคู่รูปแบบ

if score >= 90:
    grade = "A"
elif score >= 70:
    grade = "B"
else:
    grade = "C"

status = "ผู้ใหญ่" if age >= 18 else "เด็ก"   # ตัวดำเนินการ ternary

match command:
    case "start":
        print("เริ่มทำงาน")
    case "stop" | "exit":
        print("หยุดทำงาน")
    case _:
        print("ไม่รู้จักคำสั่งนี้")

ค่าที่ถือว่าเป็นเท็จได้แก่ False, None, 0, สตริงว่าง และคอลเลกชันว่าง ดังนั้นแทนที่จะเขียน if len(items) > 0 ก็เขียนเพียง if items

ลูปใน Python: ไวยากรณ์ for และ while

ลูป for

ไวยากรณ์ของลูป for ใน Python คือ for ตัวแปร in ลำดับ: และตามด้วยเนื้อหาที่เยื้องเข้าไป ลูปวนผ่านออบเจกต์ใดก็ได้ที่วนซ้ำได้ เช่น สตริง ลิสต์ ดิกชันนารี ไฟล์ หรือ range

for i in range(5):              # 0 1 2 3 4
    print(i)

for i in range(10, 0, -2):      # 10 8 6 4 2
    print(i)

for i, fruit in enumerate(["แอปเปิล", "ลูกแพร์"], start=1):
    print(i, fruit)

for name, score in zip(names, scores):
    print(name, score)

for key, value in prices.items():
    print(key, value)

ลูป while

attempts = 3
while attempts > 0:
    password = input("รหัสผ่าน: ")
    if password == "secret":
        print("เข้าสู่ระบบสำเร็จ")
        break
    attempts -= 1
else:
    print("หมดจำนวนครั้งที่ลองแล้ว")   # ทำงานเมื่อไม่มี break
คำสั่งทำอะไร
breakออกจากลูปก่อนเวลา
continueข้ามไปรอบถัดไป
else ของลูปทำงานเมื่อลูปจบโดยไม่มี break
range(stop), range(start, stop, step)ลำดับของตัวเลข โดย stop ไม่ถูกนับรวม

Comprehension

squares = [x ** 2 for x in range(10)]
evens = [x for x in numbers if x % 2 == 0]
lengths = {word: len(word) for word in words}
unique = {c.lower() for c in text}
total = sum(x * x for x in range(100))   # นิพจน์ตัวสร้าง (generator expression)

ฟังก์ชัน

def greet(name: str, greeting: str = "สวัสดี") -> str:
    """คืนคำทักทาย"""
    return f"{greeting}, {name}!"

def total(*args, **kwargs):
    return sum(args), kwargs

square = lambda x: x * x
print(greet("อนันต์"))                 # สวัสดี, อนันต์!
print(greet("อนันต์", greeting="ไง"))   # ไง, อนันต์!
องค์ประกอบความหมาย
def f(a, b=1)พารามิเตอร์ที่มีค่าเริ่มต้น
*argsอาร์กิวเมนต์ตำแหน่งจำนวนเท่าใดก็ได้ (ทูเพิล)
**kwargsอาร์กิวเมนต์แบบชื่อจำนวนเท่าใดก็ได้ (ดิกชันนารี)
returnคืนค่า ถ้าไม่มีฟังก์ชันจะคืน None
lambda x: ...ฟังก์ชันไม่มีชื่อแบบสั้นที่มีนิพจน์เดียว
global, nonlocalเปลี่ยนตัวแปรจากขอบเขตภายนอก

อย่าใช้ค่าเริ่มต้นที่เปลี่ยนแปลงได้ เช่น def f(items=[]) เพราะลิสต์ถูกสร้างครั้งเดียวและสะสมข้ามการเรียกแต่ละครั้ง วิธีที่ถูกคือใช้ items=None และภายในเขียน if items is None: items = []

ฟังก์ชันในตัวของ Python

ฟังก์ชันในตัวของ Python ใช้ได้โดยไม่ต้อง import เป็นฟังก์ชันหลักที่เจอแทบทุกสคริปต์

ฟังก์ชันทำอะไรตัวอย่าง → ผลลัพธ์
print()แสดงค่าprint(1, 2, sep="-") → 1-2
input()อ่านสตริงจากคีย์บอร์ดint(input())
len()ความยาวของคอลเลกชันหรือสตริงlen("abc") → 3
type()ชนิดของอ็อบเจกต์type(3.0) → <class 'float'>
isinstance()ตรวจชนิดข้อมูลisinstance(5, int) → True
int() float() str() bool()แปลงชนิดข้อมูลint("42") → 42
list() tuple() set() dict()สร้างคอลเลกชันlist("ab") → ['a', 'b']
range()ช่วงของตัวเลขlist(range(3)) → [0, 1, 2]
enumerate()คู่ (ดัชนี, องค์ประกอบ)list(enumerate("ab")) → [(0, 'a'), (1, 'b')]
zip()จับลำดับมาคู่กันทีละตัวlist(zip([1, 2], "ab")) → [(1, 'a'), (2, 'b')]
sum() min() max()ผลรวม ค่าต่ำสุด ค่าสูงสุดmax([3, 7, 1]) → 7
abs() round()ค่าสัมบูรณ์และการปัดเศษround(3.14159, 2) → 3.14
sorted()ลิสต์ใหม่ที่เรียงแล้วsorted(words, key=len, reverse=True)
reversed()ตัววนซ้ำในลำดับย้อนกลับlist(reversed([1, 2])) → [2, 1]
map() filter()ใช้ฟังก์ชันกับทุกค่า / กรองค่าlist(map(str, [1, 2])) → ['1', '2']
any() all()มีอย่างน้อยหนึ่งค่า / ทุกค่าเป็นจริงall(x > 0 for x in nums)
open()เปิดไฟล์open("a.txt", encoding="utf-8")
help() dir()คู่มือและรายชื่อแอตทริบิวต์help(str.split), dir(list)
id() hash()รหัสและแฮชของอ็อบเจกต์hash("a")

คู่มืออ้างอิงที่มีประโยชน์ที่สุดอยู่ในตัวเครื่อง ได้แก่ ฟังก์ชัน help() ใน REPL: help(dict) แสดงเมธอดทั้งหมดของดิกชันนารีพร้อมคำอธิบาย และ dir(obj) แสดงชื่อที่ใช้ได้

เมธอดของสตริง

สตริงใน Python เปลี่ยนแปลงไม่ได้ ทุกเมธอดคืนสตริงใหม่ การตัดสตริง (slice) ทำงานเหมือนกับลิสต์: s[1:4] และ s[::-1] สำหรับกลับลำดับ

เมธอดตัวอย่าง → ผลลัพธ์
upper() lower()"Py".upper() → 'PY'
capitalize() title()"hello world".title() → 'Hello World'
strip() lstrip() rstrip()" hi \n".strip() → 'hi'
split(sep)"a,b,c".split(",") → ['a', 'b', 'c']
join(iterable)"-".join(["a", "b"]) → 'a-b'
replace(old, new)"แมว".replace("แ", "ห") → 'หมว'
find() index()"hello".find("l") → 2; ถ้าไม่เจอ -1 (ส่วน index จะเกิดข้อผิดพลาด)
count()"banana".count("a") → 3
startswith() endswith()"file.py".endswith(".py") → True
isdigit() isalpha() isspace()"123".isdigit() → True
removeprefix() removesuffix()"test_a".removeprefix("test_") → 'a'
zfill() center() ljust()"7".zfill(3) → '007'
format()"{} + {}".format(1, 2) → '1 + 2'

คำสั่งของลิสต์ใน Python

ลิสต์เป็นคอลเลกชันที่เปลี่ยนแปลงได้และมีลำดับ เมธอดส่วนใหญ่แก้ไขลิสต์ในตัวมันเองและคืนค่า None ดังนั้น a = a.sort() จึงเป็นข้อผิดพลาดที่พบบ่อย

การทำงานทำอะไรตัวอย่าง
append(x)เพิ่มต่อท้ายa.append(4)
extend(iter)เพิ่มองค์ประกอบทั้งหมดa.extend([5, 6])
insert(i, x)แทรกที่ดัชนีa.insert(0, "first")
remove(x)ลบการปรากฏแรกของค่าa.remove(3)
pop(i)ลบและคืนองค์ประกอบ (ค่าเริ่มต้นคือตัวสุดท้าย)last = a.pop()
clear()ล้างลิสต์a.clear()
index(x)ดัชนีของการปรากฏแรกa.index("b")
count(x)จำนวนครั้งที่ปรากฏa.count(1)
sort()เรียงลำดับในตัวเองa.sort(key=str.lower)
reverse()กลับลำดับในตัวเองa.reverse()
copy()สำเนาแบบตื้น (shallow copy)b = a.copy()
del a[i]ลบตามดัชนีหรือช่วงdel a[1:3]
การตัด (slice)a[start:stop:step]a[-1] คือตัวสุดท้าย a[:3] คือสามตัวแรก

คำสั่งของดิกชันนารีใน Python

การทำงานทำอะไรตัวอย่าง
d[key]ค่าจากคีย์ ถ้าไม่มีคีย์จะเกิด KeyErrord["name"]
get(key, default)ค่า หรือค่าสำรองถ้าไม่มีd.get("age", 0)
d[key] = valueเพิ่มหรือแก้ไขค่าd["city"] = "เชียงใหม่"
keys() values() items()คีย์ ค่า คู่ของทั้งสองfor k, v in d.items():
update()รวมกับดิกชันนารีอีกอันd.update({"a": 1})
d1 | d2ดิกชันนารีใหม่ที่รวมแล้วmerged = defaults | user
pop(key, default)ลบและคืนค่าd.pop("tmp", None)
popitem()ลบคู่ที่เพิ่มล่าสุดd.popitem()
setdefault(key, value)คืนค่า ถ้าไม่มีคีย์ให้สร้างขึ้นd.setdefault("tags", []).append("py")
key in dตรวจว่ามีคีย์หรือไม่if "name" in d:
dict.fromkeys()ดิกชันนารีจากคีย์ที่มีค่าเดียวกันdict.fromkeys("abc", 0)
len(d), del d[key]ขนาดและการลบdel d["old"]

ทูเพิลและเซต

การทำงานตัวอย่าง → ผลลัพธ์
การแตกค่าทูเพิลx, y = (3, 4)
เพิ่มเข้าเซตs.add(5) ลบด้วย s.discard(5)
รวม / ส่วนร่วม{1, 2} | {2, 3} → {1, 2, 3}; {1, 2} & {2, 3} → {2}
ผลต่าง{1, 2} - {2} → {1}
ลบค่าซ้ำจากลิสต์list(dict.fromkeys(items)) — คงลำดับเดิมไว้

ข้อยกเว้นและไฟล์

try:
    number = int(input("ตัวเลข: "))
except ValueError as err:
    print("นี่ไม่ใช่ตัวเลข:", err)
else:
    print("สำเร็จ")
finally:
    print("ทำงานทุกครั้ง")

with open("data.txt", "w", encoding="utf-8") as f:
    f.write("บรรทัดหนึ่ง\n")

with open("data.txt", encoding="utf-8") as f:
    for line in f:
        print(line.rstrip())
ข้อยกเว้นเกิดขึ้นเมื่อ
SyntaxError, IndentationErrorไวยากรณ์หรือการเยื้องผิด
NameErrorไม่ได้นิยามชื่อ (พิมพ์ผิด)
TypeErrorใช้การดำเนินการกับชนิดข้อมูลที่ไม่เหมาะสม: "1" + 1
ValueErrorชนิดถูกต้องแต่ค่าไม่ถูกต้อง: int("abc")
IndexError, KeyErrorไม่มีดัชนีหรือคีย์นั้น
FileNotFoundErrorไม่พบไฟล์
ZeroDivisionErrorหารด้วยศูนย์

คลาส

from dataclasses import dataclass

class Dog:
    def __init__(self, name: str):
        self.name = name

    def bark(self) -> str:
        return f"{self.name}: โฮ่ง!"

@dataclass
class Point:
    x: float
    y: float

print(Dog("ด่าง").bark())    # ด่าง: โฮ่ง!
print(Point(1, 2))           # Point(x=1, y=2)

โมดูลในตัวของ Python

ไลบรารีมาตรฐานติดตั้งมาพร้อมอินเทอร์พรีเตอร์ แค่ใช้ import ก็พอ

โมดูลใช้ทำอะไรตัวอย่าง
mathคณิตศาสตร์math.sqrt(16) → 4.0
randomตัวเลขสุ่มrandom.randint(1, 6), random.choice(items)
datetimeวันที่และเวลาdatetime.date.today()
pathlibพาธและไฟล์Path("data").glob("*.csv")
os, sysระบบ ตัวแปรสภาพแวดล้อม อาร์กิวเมนต์os.environ.get("HOME"), sys.argv
jsonอ่านและเขียน JSONjson.loads(text), json.dumps(obj, ensure_ascii=False)
csvตาราง CSVcsv.DictReader(f)
collectionsCounter, defaultdict, dequeCounter("banana").most_common(1) → [('a', 3)]
itertoolsการรวมกันและการต่อตัววนซ้ำitertools.chain(a, b)
reนิพจน์ปกติre.findall(r"\d+", s)
timeหยุดรอและวัดเวลาtime.sleep(1), time.perf_counter()
asyncioโค้ดอะซิงโครนัสasyncio.run(main())

ใน Python 3.15 มี lazy import (PEP 810): lazy import pandas as pd เลื่อนการโหลดโมดูลไปจนถึงการเรียกใช้ครั้งแรก ทำให้สคริปต์ที่มีไลบรารีหนักเริ่มทำงานได้เร็วขึ้นมาก

คำสั่ง Python ในเทอร์มินัล

กลุ่มคำสั่งที่ค้นหาว่า «python commands» คือคำสั่งสำหรับเรียกอินเทอร์พรีเตอร์และติดตั้งไลบรารี บน Windows มักใช้ python หรือ py แทน python3

คำสั่งทำอะไร
python3 --versionแสดงเวอร์ชัน
python3เปิดคอนโซลโต้ตอบ REPL (ออกด้วย exit())
python3 script.pyรันไฟล์
python3 -c "print(2 + 2)"รันคำสั่งเดียวบรรทัดเดียว
python3 -m venv .venvสร้างสภาพแวดล้อมเสมือน
source .venv/bin/activate / .venv\Scripts\activateเปิดใช้สภาพแวดล้อม (Linux, macOS / Windows)
python3 -m pip install requestsติดตั้งแพ็กเกจ
pip list, pip freeze > requirements.txtรายการแพ็กเกจและการบันทึก
pip install -r requirements.txtติดตั้ง dependency จากไฟล์
python3 -m http.server 8000เว็บเซิร์ฟเวอร์อย่างง่ายในโฟลเดอร์ปัจจุบัน
uv init, uv add requests, uv run main.pyสร้างโปรเจกต์ เพิ่ม dependency และรันด้วยตัวจัดการ uv

ข้อผิดพลาดที่มือใหม่มักเจอ

  • เปรียบเทียบด้วย = ในเงื่อนไขต้องใช้ == ส่วน = ตัวเดียวคือการกำหนดค่า
  • ลืมโคลอน หลัง if, for, def ทำให้เกิด SyntaxError
  • บวกสตริงกับตัวเลข: "อายุ: " + 25 เป็นข้อผิดพลาด ให้เขียน f"อายุ: {25}"
  • แก้ไขลิสต์ระหว่างวนซ้ำ ให้วนซ้ำจากสำเนา for x in a[:] หรือสร้างลิสต์ใหม่
  • input() คืนค่าเป็นสตริง ถ้าต้องคำนวณ ให้ครอบด้วย int() หรือ float()

สรุป

ไวยากรณ์ Python อาศัยการเยื้องย่อหน้า โคลอน และชุดโครงสร้างเล็กๆ ได้แก่ เงื่อนไข ลูป for และ while ฟังก์ชัน และคลาส เมื่อเพิ่มฟังก์ชันในตัวสองสามสิบตัวและเมธอดของสตริง ลิสต์ และดิกชันนารี คุณจะแก้โจทย์ประจำวันได้ส่วนใหญ่ เก็บ cheat sheet นี้ไว้ และเมื่อคุ้นกับตารางเหล่านี้แล้ว ค่อยไปต่อที่โมดูลและอะซิงโครนัส ทั้งหมดนี้อธิบายทีละขั้นตอนพร้อมตัวอย่างในคอร์ส «Python 3.15: จากมือใหม่สู่มืออาชีพ»

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

ควรเยื้องกี่ช่องว่างใน Python?

ตามมาตรฐาน PEP 8 ให้ใช้ 4 ช่องว่างต่อหนึ่งระดับ สิ่งสำคัญคือทุกบรรทัดในบล็อกเหมือนกันและไม่ผสมกับแท็บ

ลิสต์ต่างจากทูเพิลอย่างไร?

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

จะดูเมธอดทั้งหมดของออบเจกต์ได้อย่างไรใน Python?

เรียก dir(obj) เพื่อดูรายชื่อ และ help(obj) เพื่ออ่านคำอธิบาย เช่น help(str) แสดงเมธอดทั้งหมดของสตริง

sort() ต่างจาก sorted() อย่างไร?

เมธอด list.sort() เรียงลิสต์ในตัวเองและคืนค่า None ส่วนฟังก์ชัน sorted() คืนลิสต์ใหม่ และใช้ได้กับคอลเลกชันที่วนซ้ำได้ทุกชนิด

ต้องมีเซมิโคลอนท้ายบรรทัดไหม?

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