Tutorial

Walrus Operator ของเล่นใหม่ใน Python 3.8 อิหยังว้าาาา

By Arnon Puitrakul - 10 กันยายน 2021

Walrus Operator ของเล่นใหม่ใน Python 3.8 อิหยังว้าาาา

Photo by Jay Ruzesky on Unsplash

เรื่องนี้อยู่ ๆ ก็นึกขึ้นได้ว่าเมื่อ 1-2 ปีก่อน ตอนอ่าน Release Note ของ Python 3.8 อ่าน ๆ ไปแล้วมันต้องสะดุด Feature นึงเลย คือ Walrus Operator คือเขียนโปรแกรมมา ยังไม่เคยเจอเลย อยู่ ๆ มันก็มาอยู่ใน Python คือ งง ไปเลย อ่านครั้งแรกคือ อิหยังว้าาาาา แต่พอมาดูในรายละเอียดมันทำให้การเขียน Script ของเราสั้นลงเยอะมาก วันนี้เราลองมาดูกันว่า มันคืออะไร และใช้ยังไง

Walrus Operator

Walrus Operator เป็นเครื่องหมาย ที่ทำหน้าที่แพค 2 ในตัวเดียวกันเลย คือ การ Assign ค่า เหมือนกับเท่ากับปกติที่เราใช้งานกัน และ ยัง Return ค่าออกไปอีกด้วย อ่านแล้วอาจจะ งง ลองดูตัวอย่างนี้ดู

a = 10
print(a)

ในตัวอย่างนี้ เรา Assign ให้ a เป็น 10 โดยใช้เท่ากับ และ เราก็ใช้คำสั่ง print() เพื่อเอา a ออกมาแสดงผลที่หน้าจอ ซึ่งแน่นอนละว่ามันก็ควรจะต้องออก 10 อยู่แล้ว นั่นไม่ใช่ประเด็น

print(a := 10)

เมื่อเราใช้ Walrus Operator มันก็จะย่อลงเหลือแค่บรรทัดเดียวเลย อย่างที่เราบอกว่า Walrus Operator มันจะทำการ Assign ค่า ในที่นี้มันจะเอา 10 ใส่เข้าไปใน a ในขณะเดียวกัน มันจะปล่อยเลข 10 ออกมาด้วย ซึ่งมันก็จะอยู่ในคำสั่ง print() สุดท้าย ทำให้เราได้ a เป็น 10 และนำเลข 10 ออกมาทางหน้าจอ เหมือนกับเป็นการรวม 2 บรรทัดที่เราทำก่อนหน้านี้เข้าด้วยกัน

ตัวอย่าง

เราว่าตัวอย่างเจ๋ง ๆ ของการใช้ Walrus Operator คือ ส่วนที่อยู่ใน Loop ทั้งหลาย ในตัวอย่างนี้ เราจะทำการเปิดไฟล์ขึ้นมาเพื่ออ่านทีละบรรทัด วนไปเรื่อย ๆ จนกว่าจะหมดไฟล์

sample_file = open('sample.txt', 'r')

inputs = []
line = sample_file.readline()

while line != '' :
    inputs.append(line.rstrip())
    line = sample_file.readline()

sample_file.close()

Code ด้านบน เป็นการอ่านไฟล์ทั่ว ๆ ไปเลย เราก็สร้าง List สำหรับการเก็บสิ่งที่อ่านมาได้ และใช้ While Loop มีเงื่อนไขว่า ถ้าบรรทัดที่เราอ่านเข้ามา มันไม่ได้เป็น String ว่างนั่นหมายถึง เมื่อเราอ่านจนสุดไฟล์แล้ว แล้วเราอ่านต่อ Python มันจะให้ออกมาเป็น String ว่าง ดังนั้น เราก็เช็คผ่านเงื่อนไขพวกนี้ได้เลย ภายใน Loop เราก็จะให้มันเอาสิ่งที่อ่านได้ ยัดลงไปใน List ที่เราสร้างไว้ ก็เป็นอันเรียบร้อย เราจะเห็นได้เลยว่า มันต้องใช้หลายบรรทัดเหมือนกันนะ ในการทำอะไรแค่นี้

sample_file = open('sample.txt', 'r')

inputs = []

while (line := sample_file.readline()) != '' :
    input.append(line.rstrip())

sample_file.close()

ตัวนี้เราเปลี่ยนมาใช้ Walrus Operator เราจะเห็นได้เลยว่า Code มันหายไปเลย 2 บรรทัด และ อ่านแล้วน่าจะเข้าใจได้ง่ายขึ้นเยอะ จากเดิมที่ต้องมานั่งดูว่าอะไรนะ มันเป็น String ว่าง งง ไปหมด เราก็รวบมันมาอยู่บรรทัดเดียวไปเลยก็ทำให้เราอ่านได้ง่ายขึ้นเยอะมาก

ใน Document ของ Python เอง ก็มีตัวอย่างของตัว Python ที่ทำการเปลี่ยนมาใช้ Walrus Operator ด้วยเช่นกัน ลองไปดูได้ที่ Python Documentation

สรุป

Walrus Operator เป็นเครื่องหมายใหม่ที่มาพร้อมกับ Python 3.8 ดูตอนแรกมันจะอิหยังวะมาก ๆ แต่พอได้ใช้ ๆ ไป มันก็เป็นเครื่องหมายที่ทำให้เราเขียน Script สั้นลงมาก ๆ อย่างไม่น่าเชื่อเลย สิ่งที่มันทำ มันเป็นการรวบ 2 ขั้นตอนเข้าด้วยกันคือ การ Assign ค่าตามการเป็นเครื่องหมายเท่ากับตามปกติ และ การ Return ค่าออกมา เพื่อนำไปใช้ต่อ อาจจะนำไปยัดใน Function ต่าง ๆ เพื่อให้เราสามารถ Assign ค่า และ ทำงานไปในบรรทัดเดียวกันเลยก็ได้

Read Next...

โหลด CSV วิธีไหนเร็วที่สุด ?

โหลด CSV วิธีไหนเร็วที่สุด ?

เมื่อหลายวันก่อนมีพี่ที่รู้จักกันมาถามว่า เราจะโหลด CSV ยังไงให้เร็วที่สุด เป็นคำถามที่ดูเหมือนง่ายนะ แต่พอมานั่งคิด ๆ ต่อ เห้ย มันมีอะไรสนุก ๆ ในนั้นเยอะเลยนี่หว่า วันนี้เราจะมาเล่าให้อ่านกันว่า มันมีวิธีการอย่างไรบ้าง และวิธีไหนเร็วที่สุด เหมาะกับงานแบบไหน...

ฮาวทู Sync Obsidian Note ด้วย LiveSync Plugin

ฮาวทู Sync Obsidian Note ด้วย LiveSync Plugin

ตั้งแต่ใช้ Obsidian เป็น App จด Note หลัก ชอบวิธีการจัดการมาก ๆ เมื่อใช้งานร่วมกับ Plugin ต่าง ๆ ยิ่งทำให้การใช้งานยืดหยุ่นมากกว่าเดิมอีกเยอะมาก ๆ ติดอยู่เรื่องเดียวคือ การใช้งานในหลาย ๆ อุปกรณ์ แต่เราเจอ Plugin ตัวนึงที่น่าสนใจมาก ๆ คือ LiveSync วันนี้เราจะมาเล่าวิธีการติดตั้ง และใช้งานมันกัน...

การสร้าง SSD Storage Pool บน Synology DSM

การสร้าง SSD Storage Pool บน Synology DSM

สำหรับคนที่ใช้ Synology NAS บางรุ่นจะมีช่อง M.2 สำหรับเสียบ NVMe SSD โดยพื้นฐาน Synology บอกว่ามันสำหรับการทำ Cache แต่ถ้าเราต้องการเอามันมาทำเป็น Storage ละ มันจะทำได้มั้ย วันนี้เราจะมาเล่าวิธีการทำกัน...

Multiprogramming, Multiprocessing และ Multithreading

Multiprogramming, Multiprocessing และ Multithreading

หลังจากที่เรามาเล่าเรื่อง malloc() มีคนอยากให้มาเล่าเรื่อง pthread เพื่อให้สามารถยัด Content ที่ละเอียด และเข้าใจง่ายในเวลาที่ไม่นานเกินไป เลยจะมาเล่าพื้นฐานที่สำคัญของคำ 3 คำคือ Multiprogramming, Multitasking, Multiprocessing และ Multithreading...