Tag: stdlib
79 รายการ
Blog

Python 3.15 แตกลิสต์ใน comprehension ได้แล้ว: PEP 798 คืออะไร
อัปเดต Python 3.15 ที่ให้ใช้ * และ ** ใน list/set/dict comprehension อ่านแล้วรู้ว่าเมื่อไหร่ควรใช้แทน nested loop และผลกระทบกับโค้ดเดิม
Java Objects.checkIndex: ตรวจ index ก่อนแตะ array และ ByteBuffer
ใช้ Objects.checkIndex รวม boundary check แบบ fail-fast พร้อมแยก index จาก from-to range และแปลง exception ที่ API boundary
Zig std.mem.tokenizeAny: แยกคำเมื่อ delimiter มีหลายตัว
ใช้ tokenizeAny แยกข้อความด้วยช่องว่าง comma slash หรือ pipe โดยไม่คืน token ว่าง พร้อมเทียบ tokenizeScalar และ splitAny
Go maps.DeleteFunc: ล้างสมาชิกที่ไม่ผ่านเงื่อนไขใน map เดิม
ใช้ maps.DeleteFunc ลบ cache ที่หมดอายุหรือค่าที่ไม่ผ่าน policy พร้อมระวัง nil map, side effect และการแก้ map ระหว่าง callback
Zig std.mem.findMinMax: หา index ค่าน้อยสุดและมากสุดในรอบเดียว
ใช้ findMinMax บน slice ที่ไม่ว่าง พร้อมจัดการ empty input และ tie behavior ด้วย test บน Zig 0.17
Python email.headerregistry: อ่านหัวอีเมลแบบมีชนิด ไม่ต้องตัดสตริงเอง
ใช้ HeaderRegistry และ Address แยกชื่อกับที่อยู่ พร้อมทดสอบ Content-Type แบบมีพารามิเตอร์
Python csv.unix_dialect: ส่งไฟล์ CSV ข้ามเครื่องโดยไม่พังเพราะขึ้นบรรทัดใหม่
ใช้ dialect ที่ quote ทุกฟิลด์และขึ้นบรรทัดแบบ LF พร้อมทดสอบความต่างจาก excel
Go slices.Concat: รวมหลาย slice โดยไม่ผูกผลลัพธ์กับ backing array เดิม
ใช้ slices.Concat รวมข้อมูลหลายก้อน พร้อมทดสอบ aliasing, capacity และกรณีที่ append เดิมอ่านยาก
Go slices.CompactFunc: รวมข้อมูลซ้ำที่ติดกันด้วยกติกาของเรา
ลดข้อมูลซ้ำแบบ adjacent โดยกำหนด equality เอง พร้อมแยกกรณีที่ต้อง sort ก่อนและผลต่อ backing array
Zig std.mem.rotate: หมุน slice in-place สำหรับคิวแบบวงแหวน
เข้าใจทิศทาง amount, ค่าเกินความยาว และ trade-off ของการหมุนข้อมูลจริงเทียบกับเก็บ head index
Python math.sumprod: คูณเป็นคู่แล้วรวมอย่างอ่านตรงโจทย์
ใช้ math.sumprod ทำ dot product และ weighted total พร้อมตรวจความยาว input และชนิดตัวเลข
Zig indexOfScalarPos: ค้นตัวคั่นต่อจาก cursor โดยไม่ตัด slice ซ้ำ
ใช้ std.mem.indexOfScalarPos ทำ parser แบบเดิน cursor พร้อมเข้าใจ null และขอบเขตเริ่มค้นหา
Go slices.Backward: วนจากท้ายโดยไม่กลับลำดับข้อมูลต้นฉบับ
ใช้ iterator ย้อนลำดับใน Go เมื่ออยากอ่านจากท้ายไปหน้า โดยไม่ mutate slice และไม่เขียน index loop เอง
Python SimpleNamespace: ทำวัตถุ attribute เร็วๆ โดยไม่ต้องเขียนคลาส
ใช้ types.SimpleNamespace เก็บค่าแบบจุดเข้าถึงด้วยชื่อ พร้อมเทียบกับ dict และทดสอบการอัปเดต attribute
Python atexit: จองคิวเก็บกวาดก่อนโปรเซสจบ
ลงทะเบียนฟังก์ชันด้วย atexit.register ให้รันตอน interpreter ปกติจะจบ พร้อมทดสอบลำดับ LIFO และกรณีที่ handler ไม่ถูกเรียก
Python enum.auto: ให้เลขสมาชิกเอง ไม่ต้องไล่พิมพ์เอง
ใช้ enum.auto() ไล่ค่าอัตโนมัติใน IntEnum/Enum พร้อมทดสอบว่าลำดับประกาศคือลำดับตัวเลข และกันสับสนตอนแทรกสมาชิกใหม่
Python bisect.insort: สอดค่าใหม่แล้วยังเรียงอยู่
ใช้ bisect.insort คงลิสต์เรียงตอนแทรก พร้อมตัวอย่าง unittest — เหมาะคิวคะแนน/ตารางเวลาเล็ก ๆ
Python statistics.correlation: วัดแนวโน้มสองชุดตัวเลขใน stdlib
ใช้ statistics.correlation (3.10+) คำนวณ Pearson พร้อม unittest รันจริง — ไม่ต้องดึง NumPy แค่ดูความสัมพันธ์คร่าว ๆ
Python typing.override: แสตมป์บอก type checker ว่าตั้งใจทับเมธอดแม่
ใช้ @override จาก typing (PEP 698) เพื่อจับชื่อเมธอดทับผิด พร้อม unittest รันไทม์
Python dataclasses.replace: คัดลอกแล้วแก้บางฟิลด์แบบปลอดภัย
ใช้ dataclasses.replace กับ dataclass ธรรมดาและ frozen พร้อม unittest
Python deque(maxlen): คิววงกลมที่ตัดของเก่าให้อัตโนมัติ
ใช้ collections.deque แบบ maxlen เพื่อเก็บหน้าต่างล่าสุด N ชิ้น พร้อม unittest
Python operator.methodcaller: เรียกเมธอดเป็นคีย์เรียง/แมปโดยไม่เขียนแลมบ์ดา
ใช้ operator.methodcaller สร้าง callable ที่เรียกเมธอดชื่อเดิม พร้อมอาร์กิวเมนต์ คู่กับ sorted/map
Python as_completed: เก็บผลงานขนานทีละชิ้นตามลำดับเสร็จ
ใช้ concurrent.futures.as_completed เพื่อประมวลผล future ที่เสร็จก่อนโดยไม่รอทั้งหมด พร้อม unittest
Python NormalDist: แปลงค่าเฉลี่ยกับส่วนเบี่ยงเบนเป็น threshold ที่อธิบายได้
ใช้ statistics.NormalDist คำนวณ percentile และ probability พร้อมเตือนเรื่องสมมติฐานการกระจายปกติ
Python total_ordering: ลด comparison boilerplate แต่เก็บกฎลำดับไว้จุดเดียว
สร้าง value object ที่เรียงได้จาก __eq__ และ comparator หนึ่งตัว พร้อมขอบเขตของ NotImplemented
Python WeakValueDictionary: ทำ cache ที่ไม่ยื้ออายุ object
ใช้ weak reference ให้ cache ปล่อยค่าเมื่อไม่มีเจ้าของจริง พร้อมอธิบาย race และชนิดที่เก็บไม่ได้
Zig 0.16 renamePreserve: ย้ายไฟล์โดยไม่เขียนทับปลายทางเงียบ ๆ
ใช้ Io.Dir.renamePreserve ทำ publish แบบ fail-closed และแยกกรณีปลายทางมีอยู่จากการ replace
Rust core::range::Range: เก็บ span แบบ Copy โดยไม่ให้ range เป็น iterator
ใช้ range ชุดใหม่ของ Rust แยกข้อมูลช่วงออกจากสถานะ iteration พร้อมข้อควรระวังเรื่อง syntax เดิม
Go reflect.TypeAssert: ตรวจชนิดจาก reflect.Value โดยไม่สร้าง interface กลาง
ย้ายจาก Value.Interface().(T) มาใช้ reflect.TypeAssert พร้อมอธิบายกรณีที่แก้ได้และขอบเขตของ reflection
operator.attrgetter: ดึงฟิลด์เรียง/แมปโดยไม่เขียน lambda ซ้ำ
ใช้ operator.attrgetter ดึง attribute เดี่ยวหรือหลายตัว รวม dotted path สำหรับ sorted และ map
textwrap.shorten: ตัดสรุปยาวให้พอดีการ์ด UI
ใช้ textwrap.shorten ยุบช่องว่างแล้วตัดข้อความให้กว้างตามที่กำหนด พร้อม placeholder
hmac.compare_digest: เทียบลายเซ็นแบบกัน timing attack
ใช้ hmac.compare_digest เทียบ digest แทน == เพื่อลดความเสี่ยง timing side-channel ตามเอกสาร Python stdlib
Python os.path.commonpath: ตรวจขอบเขต path โดยไม่หลง prefix ที่หน้าตาเหมือนกัน
เทียบ commonpath กับ commonprefix และย้ำว่าต้อง resolve symlink ก่อนใช้เป็น security boundary
Python enum.verify: ให้คลาส Enum ล้มตั้งแต่ import เมื่อค่าผิดสัญญา
ใช้ UNIQUE และ CONTINUOUS ตรวจ enum ตอนประกาศ พร้อมเลือกกฎให้ตรงกับ domain
Python csv.Sniffer: เดารูปแบบไฟล์ได้ แต่ต้องมี fallback ที่คาดเดาได้
ใช้ Sniffer ตรวจ delimiter จาก sample พร้อมรับมือข้อมูลสั้น กำกวม และ input ที่ไม่น่าเชื่อถือ
Go unique.Handle: ทำคีย์ซ้ำให้เหลือตัวแทนเดียวก่อนเก็บในแคช
ใช้ unique.Make สร้าง handle ที่เทียบได้เร็ว พร้อมขอบเขตเรื่องอายุข้อมูลและหน่วยความจำ
Python SpooledTemporaryFile: เก็บใน RAM ก่อน แล้วค่อยกลิ้งลงดิสก์เมื่อใหญ่เกิน
ใช้ tempfile.SpooledTemporaryFile เมื่อยังไม่รู้ขนาด — ตั้ง max_size แล้ว rollover() เมื่อต้องการ fileno
Python SharedMemory: แชร์ไบต์ข้ามโปรเซสโดยไม่ pickle ทั้งก้อน
สรุป multiprocessing.shared_memory — สร้างบล็อก ตั้งชื่อ แนบจากโปรเซสอื่น แล้ว close/unlink ให้ครบ
Python ipaddress: เช็กเครือข่ายทับกันด้วย overlaps() ก่อนเปิด firewall
ใช้ IPv4Network/IPv6Network.overlaps() จาก stdlib ตรวจว่าสองซัปเน็ตชนกันไหม — พร้อมตัวอย่างที่รันได้
Rust array::from_fn: สร้าง array ของค่าที่ไม่ใช่ Copy ทีละช่อง
ใช้ closure ที่รับ index สร้าง fixed array พร้อมทดสอบลำดับและกรณี array ว่าง
Java Semaphore: จำกัดงานพร้อมกันด้วย permit ที่คืนเสมอ
ควบคุมจำนวนงานที่เข้าทรัพยากรพร้อมกันด้วย try/finally และเข้าใจ fairness ของ Semaphore
Java Instant.truncatedTo: จัด event ลง bucket นาทีโดยไม่ปัดผิดเขตเวลา
แยกเวลา UTC ของ event จากวันท้องถิ่น และทดสอบการตัดวินาทีด้วย ChronoUnit
Java ArrayDeque: คิวงานสองด้านโดยไม่ต้องใช้ LinkedList
ใช้ addLast/removeFirst เป็น FIFO และ addFirst/removeFirst เป็น stack พร้อมข้อห้ามเรื่อง null และ thread safety
Python Fraction: เก็บอัตราส่วนให้ตรงตั้งแต่รับค่า
แยกการสร้าง Fraction จาก string กับ float และใช้ limit_denominator อย่างมีขอบเขต
Python difflib: อ่านการเปลี่ยนบรรทัดด้วย opcode ก่อนทำ review
ใช้ SequenceMatcher.get_opcodes แยกส่วนที่เท่ากัน เพิ่ม ลบ และแทนที่ พร้อมข้อจำกัดของ similarity score
Python 3.14: map(..., strict=True) — จับความยาว iterable ไม่เท่ากันแบบ zip
สรุปพารามิเตอร์ strict ของ built-in map ใน Python 3.14 ให้พฤติกรรมคล้าย zip(..., strict=True)
Python 3.14: heapq มี heapify_max / heappush_max — เลิกกลับเครื่องหมายเอง
สรุปตัวช่วย max-heap ใหม่ใน heapq 3.14 — heapify_max, heappush_max, heappop_max, heapreplace_max, heappushpop_max
Python 3.14: Token ของ contextvars ใช้ with ได้ — set แล้วรีเซ็ตอัตโนมัติ
สรุป contextvars.Token เป็น context manager ใน Python 3.14 — with var.set(value): … แล้วค่าเดิมกลับเอง
Java ProcessHandle.onExit — รู้เมื่อโปรเซสลูกจบโดยไม่บล็อกเธรดหลัก
ใช้ ProcessHandle.onExit() ได้ CompletableFuture เมื่อโปรเซสจบ — เหมาะกับเฝ้า CLI/agent ลูก พร้อมตัวอย่าง verified บน JDK 21
Java String.isBlank / strip — เช็กช่องว่าง Unicode ให้ถูก ไม่ใช่แค่ trim()
สรุปความต่าง isBlank, isEmpty, strip, trim ใน Java — กันบั๊กฟอร์มว่างและช่องว่าง Unicode พร้อมตัวอย่างบน JDK 21
Java List.copyOf — สแนปช็อตลิสต์แบบอ่านอย่างเดียวในคำสั่งเดียว
ใช้ List.copyOf สร้างสำเนา immutable จาก Collection — กัน caller แก้ลิสต์ต้นทางโดยไม่ตั้งใจ พร้อมตัวอย่าง verified บน JDK 21
Python 3.15: bytearray.take_bytes — ดึง bytes ออกจากบัฟเฟอร์โดยไม่คัดลอกเกินจำเป็น
สรุป bytearray.take_bytes ใน Python 3.15 สำหรับพาร์สโปรโตคอล/บัฟเฟอร์เครือข่าย — คืน bytes แล้วตัดออกจาก bytearray
Python 3.15: TaskGroup.cancel — ยกเลิกกลุ่มงาน asyncio แบบตรง ๆ
สรุป asyncio.TaskGroup.cancel ใน Python 3.15 — เลิกใช้ทริคยก exception ปลอมเพื่อหยุดกลุ่มเมื่องานเสร็จก่อนกำหนด
Python 3.15: Path.mkdir(parent_mode=…) — ตั้งสิทธิ์โฟลเดอร์กลางทางแยกจากปลายทาง
สรุป pathlib.Path.mkdir parent_mode ใน Python 3.15 เมื่อ parents=True — ควบคุม mode ของ intermediate dirs แยกจากโฟลเดอร์สุดท้าย
compression.zstd ใน stdlib: บีบไฟล์ .zst โดยไม่ติดตั้งแพ็กเกจนอก (Python 3.14)
ใช้ compression.zstd.compress/decompress และ open เขียนไฟล์ Zstandard ใน Python 3.14 ตาม PEP 784
asyncio.print_call_graph: ดูต้นไม้ task ค้างตอนดีบัก (Python 3.14)
ใช้ capture_call_graph / print_call_graph / format_call_graph ดูว่าคอร์รูทีนไหนรออะไร พร้อมตัวอย่าง static ที่รันบน 3.14
Python 3.14: Path.copy / Path.move — คัดลอกและย้ายไฟล์โดยไม่ต้องเรียก shutil แยก
สรุป pathlib.Path.copy, copy_into, move, move_into ใน Python 3.14 พร้อมตัวอย่าง verified และข้อควรระวัง metadata/symlink
tempfile.TemporaryDirectory: โฟลเดอร์ชั่วคราวที่ลบเองเมื่อจบบล็อก
ใช้ TemporaryDirectory เป็น context manager ให้ได้ path ชั่วคราวแล้วลบอัตโนมัติ ตาม docs.python.org
secrets.token_urlsafe: สร้างโทเคนสุ่มสำหรับลิงก์และคุกกี้
ใช้ secrets.token_urlsafe จาก stdlib สร้างสตริงสุ่มที่ใส่ใน URL ได้ พร้อมตัวอย่างรันจริง
heapq.nlargest / nsmallest: หยิบ Top-N โดยไม่ sort ทั้งก้อน
ใช้ heapq.nlargest และ nsmallest จาก docs.python.org ดึงค่าสูงสุด/ต่ำสุด n ตัว พร้อมตัวอย่างรันจริง
Path.relative_to(..., walk_up=True): หาพาธญาติเมื่อเป้าหมายอยู่นอกต้นไม้เดิม
อธิบายพารามิเตอร์ walk_up ของ pathlib.Path.relative_to ตาม docs — ใช้เมื่อต้องปีนขึ้นก่อนแล้วค่อยลงไปโฟลเดอร์พี่น้อง
statistics.quantiles: ตัดคะแนนเป็นช่วงเปอร์เซ็นไทล์ใน stdlib
ใช้ statistics.quantiles แบ่งข้อมูลเป็น n กลุ่มอย่างเป็นระบบ พร้อมตัวอย่างคำนวณจริงจาก docs.python.org

อ่านไฟล์ TOML ด้วย tomllib ในสแตนดาร์ดไลบรารี
สอนโหลดคอนฟิก TOML ด้วย tomllib.load / loads พร้อม unittest ที่รันจริง ไม่ต้องติดตั้งแพ็กเกจภายนอก

Python itertools.batched: หั่นลิสต์เป็นก้อนคงที่แบบสั้น ๆ
สอนใช้ itertools.batched แบ่ง iterable เป็นทูเปิลขนาด n พร้อม unittest ที่รันจริง อ้างอิง docs.python.org
Python itemgetter: เขียน sort key หลายช่องให้สั้นและเห็นลำดับชัด
ใช้ operator.itemgetter เรียง record ตามหลายฟิลด์ พร้อมจัดการค่ากลับทิศและข้อจำกัดของข้อมูลที่อาจขาด

Python StrEnum: ติดป้ายสถานะที่เป็นสตริงโดยไม่ต้อง .value ทุกครั้ง
ใช้ enum.StrEnum ให้สมาชิกเทียบและต่อสตริงได้ตรง ๆ พร้อม unittest อ้างอิงเอกสารมาตรฐาน

Python lru_cache: จำผลคำนวณซ้ำให้ฟังก์ชันบริสุทธิ์เร็วขึ้น
อธิบาย functools.lru_cache แบบสั้น พร้อม unittest ที่พิสูจน์ว่าเรียกซ้ำไม่คำนวณใหม่
Java HexFormat: แปลง byte กับ hexadecimal แบบมาตรฐานและเทสต์ round trip
เลิกเขียนลูป String.format ทีละ byte แล้วใช้ API ที่กำหนดตัวพิมพ์และ delimiter ได้
Python shlex.join: แสดงคำสั่ง shell ให้คนอ่านโดย quote argument อย่างถูกขอบเขต
ประกอบ argv เป็นข้อความสำหรับ Unix shell แบบย้อนกลับด้วย shlex.split ได้ โดยไม่ชวนใช้ shell=True
Go testing/fstest.MapFS: เทสต์สัญญาไฟล์โดยไม่ต้องสร้าง temp directory
ใช้ MapFS จำลองต้นไม้ไฟล์แบบเล็กและ deterministic พร้อมข้อจำกัดที่ต้องรู้ก่อนแชร์ข้าม goroutine

itertools.pairwise: เดินคู่ติดกันในลำดับโดยไม่เขียน zip เอง
อธิบาย pairwise ตั้งแต่ Python 3.10 เทียบกับ zip(seq, seq[1:]) พร้อม unittest

contextlib.chdir: เปลี่ยนโฟลเดอร์ชั่วคราวแบบปลอดภัยใน with
สอนใช้ contextlib.chdir ตั้งแต่ Python 3.11 เทียบกับ os.chdir เปล่าๆ พร้อมตัวอย่างที่รันตรวจได้

statistics.fmean: ค่าเฉลี่ยทศนิยมเร็วเมื่อข้อมูลเป็น float
อธิบาย statistics.fmean จากมาตรฐาน Python เทียบกับ mean ทั่วไป พร้อมตัวอย่างรันได้

functools.cache กับ lru_cache: เมื่อไหร่ควรจำกัดขนาดแคช
เทียบ @cache กับ @lru_cache จากเอกสาร Python พร้อมตัวอย่างรันได้และเกณฑ์เลือกใช้

zoneinfo: เก็บเวลาแบบ DST-safe โดยไม่เดาออฟเซ็ตเอง
ใช้ zoneinfo.ZoneInfo กับ fold และแปลงผ่าน UTC เพื่อข้ามช่วงเปลี่ยนเวลาฤดูร้อนอย่างถูกต้อง พร้อมตัวอย่างรันได้

dataclass(slots=True, kw_only=True): ล็อกฟิลด์และบังคับคีย์เวิร์ด
สรุป slots กับ kw_only ของ dataclasses พร้อมตัวอย่างรันได้ว่าทำไมถึงกันพิมพ์ผิดและลดหน่วยความจำ

functools.lru_cache: จำผลคำนวณซ้ำโดยไม่ต้องเขียนแคชเอง
อธิบาย lru_cache จาก stdlib พร้อมตัวอย่างรันได้ ตารางเลือก maxsize และข้อควรระวังเรื่องอาร์กิวเมนต์ที่แฮชได้

Python StrEnum: เมื่อค่า enum ต้องเป็นสตริงจริงๆ
เทียบ enum.Enum กับ enum.StrEnum แบบสั้น พร้อมตัวอย่างรันได้และตารางเลือกใช้

python tomllib: อ่านไฟล์ตั้งค่า TOML ด้วยไลบรารีในมาตรฐาน
สอนใช้ tomllib ในมาตรฐาน Python เพื่ออ่านคอนฟิก TOML พร้อมตัวอย่างที่รันทดสอบได้