การจัดรูปแบบสตริงใน Python: f-string, format() และ %
บทเรียนนี้แปลจากต้นฉบับภาษาอังกฤษRead in EnglishLeer en españolЧитать на русскомLer em portuguêsแจ้งข้อผิดพลาดในการแปล
ลองนึกภาพว่าคุณกำลังทำใบเสร็จให้ร้านกาแฟ ต้องรวมชื่อสินค้า ราคา และจำนวนไว้ในบรรทัดเดียวให้ดูเรียบร้อย คุณ อาจ ใช้ + ต่อสตริงเข้าด้วยกันก็ได้ แต่โค้ดจะรกขึ้นอย่างรวดเร็ว
การจัดรูปแบบสตริงเหมือนแบบฟอร์มเติมคำในช่องว่าง คุณเขียนโครงประโยคครั้งเดียว แล้วใส่ค่าลงไปในตำแหน่งที่ต้องการ วิธีนี้สะอาดกว่า เร็วกว่า และอ่านง่ายกว่ามาก
Python มีวิธีจัดรูปแบบสตริงสามแบบ: f-string, เมธอด .format() และ ตัวดำเนินการ % ในบทเรียนนี้ คุณจะได้เรียนทั้งสามแบบ และรู้ว่าควรใช้แบบไหนเมื่อไร
ทำไมการจัดรูปแบบสตริงจึงดีกว่าการต่อสตริง
เมื่อเริ่มรวมตัวแปรเข้ากับข้อความ มือใหม่มักหยิบตัวดำเนินการ + มาใช้ก่อน ใช้ได้ก็จริง แต่ต้องแปลงตัวเลขเป็นสตริงเอง และต้องใส่เครื่องหมาย + กระจายไปทั่ว
name = "Latte"
price = 4.5
qty = 2
print("Item: " + name + " | Price: $" + str(price) + " | Qty: " + str(qty))name = "Latte"
price = 4.5
qty = 2
print(f"Item: {name} | Price: ${price} | Qty: {qty}")ทั้งสองบรรทัดให้ผลลัพธ์เหมือนกัน แต่แบบ f-string สั้นกว่า อ่านง่ายกว่า และไม่ต้องเรียก str() เองเลย Python จัดการแปลงให้อัตโนมัติ
วิธีใช้ f-string ใน Python
f-string (formatted string literal) ขึ้นต้นด้วยตัวอักษร f หน้าเครื่องหมายคำพูดเปิด ภายในสตริง ให้ใส่ตัวแปรหรือนิพจน์ไว้ในวงเล็บปีกกา {}
Python จะประมวลผลสิ่งที่อยู่ในวงเล็บปีกกาแล้วแทรกผลลัพธ์ลงในสตริง f-string เริ่มมีใน Python 3.6 และปัจจุบันเป็นวิธีจัดรูปแบบสตริงที่แนะนำ
My name is Alice. I am 30 years old. I live in Seattle.
ตัว f หน้าเครื่องหมายคำพูดคือสิ่งที่ทำให้สตริงนี้พิเศษ ถ้าไม่มี Python จะแสดงข้อความ {name} ออกมาตรงตัว แทนที่จะแสดงค่าของตัวแปร
Hello, {name}!
Hello, Alice!ใส่นิพจน์อะไรใน f-string ได้บ้าง
f-string ไม่ได้จำกัดอยู่แค่ตัวแปรธรรมดา คุณใส่นิพจน์ Python ที่ถูกต้องอะไรก็ได้ไว้ในวงเล็บปีกกา ทั้งการคำนวณ การเรียกฟังก์ชัน การเรียกเมธอด หรือแม้แต่เงื่อนไข
Area: 50 square units Length: 6 Uppercase: PYTHON Result: Pass
ให้มอง {} แต่ละคู่เป็นเครื่องคิดเลขจิ๋ว Python ประมวลผลนิพจน์ แปลงผลลัพธ์เป็นสตริง แล้ววางลงในตำแหน่งนั้น
วิธีจัดรูปแบบตัวเลขใน f-string ของ Python
ตรงนี้แหละที่ f-string โดดเด่นจริง ๆ หลังชื่อตัวแปร ให้ใส่เครื่องหมายทวิภาค : ตามด้วย ตัวกำหนดรูปแบบ (format specifier) ที่ควบคุมว่าตัวเลขจะแสดงออกมาอย่างไร
จำนวนตำแหน่งทศนิยมด้วย .Nf
ใช้ :.Nf เพื่อแสดงทศนิยม N ตำแหน่งพอดี ตัว f ย่อมาจากรูปแบบ "fixed-point" (ทศนิยมตำแหน่งคงที่) จำเป็นมากสำหรับการแสดงราคา ค่าที่วัดได้ และคะแนน
Price: $4.50 Pi: 3.1416 Rounded: 3.1
ใส่จุลภาคคั่นหลักให้ตัวเลขขนาดใหญ่
ใช้ :, เพื่อใส่จุลภาคคั่นหลักให้ตัวเลขขนาดใหญ่ ทำให้ตัวเลขอย่าง 1000000 อ่านได้ง่ายขึ้นมากในแวบเดียว
Population: 8,900,000 Salary: $75,000.50
เปอร์เซ็นต์ด้วย %
ใช้ :.N% เพื่อแสดงเลขทศนิยมเป็นเปอร์เซ็นต์ Python จะคูณค่าด้วย 100 และเติมเครื่องหมาย % ให้อัตโนมัติ
Progress: 75.6% Tax rate: 8.25%
การเติมช่องว่างและการจัดแนว
คุณกำหนดความกว้างขั้นต่ำให้ค่าได้ และควบคุมได้ว่าจะชิดซ้าย ชิดขวา หรืออยู่กึ่งกลาง เหมาะมากสำหรับการสร้างผลลัพธ์ที่จัดแนวสวยงามอย่างตาราง
|Left | | Center | | Right| | 42| |0000000042|
วิธีใช้เมธอด .format()
ก่อนจะมี f-string นักพัฒนา Python ใช้เมธอด .format() วิธีนี้ทำงานโดยวางตัวยึดตำแหน่ง {} ว่าง ๆ ไว้ในสตริง แล้วเรียก .format() พร้อมค่าที่จะเติมลงไป
Hello, Bob! You are 25 years old. Hello, Bob! You are 25 years old. Nice to meet you, Bob! Hello, Bob! You are 25 years old.
เมธอด .format() รองรับตัวกำหนดรูปแบบชุดเดียวกับ f-string ทุกอย่างหลังเครื่องหมายทวิภาคทำงานเหมือนกันทุกประการ
Price: $19.99 Big number: 1,000,000
การระบุหมายเลขตำแหน่งมีประโยชน์เมื่อต้องใช้ค่าเดิมซ้ำหลายครั้งในสตริงเดียวกัน คุณอ้างถึงดัชนีเดิมกี่ครั้งก็ได้
ตัวดำเนินการ % สำหรับจัดรูปแบบสตริง (แบบเก่า)
ตัวดำเนินการ % เป็นวิธีจัดรูปแบบสตริงที่เก่าที่สุดใน Python ยืมมาจากฟังก์ชัน printf ของภาษา C คุณจะเห็นวิธีนี้ในโค้ดเก่าและควรอ่านออก แต่ไม่จำเป็นต้องใช้ในโค้ดใหม่
Hello, Charlie! You are 35 years old. Price: $9.99
%s หมายถึง "แทรกสตริงตรงนี้" %d หมายถึง "แทรกจำนวนเต็ม" และ %f หมายถึง "แทรกทศนิยม" ค่าต่าง ๆ จะอยู่หลังตัวดำเนินการ % ที่ท้ายสุด
f-string, format() หรือ %: ควรใช้แบบไหน
ทั้งสามวิธีให้ผลลัพธ์เหมือนกัน ที่ต่างกันคือความอ่านง่ายและความสะดวก นี่คือผลลัพธ์เดียวกันที่เขียนได้สามแบบ:
Coffee: $4.50 Coffee: $4.50 Coffee: $4.50
f-string หลายบรรทัดและรูปแบบที่ใช้งานจริง
สำหรับสตริงจัดรูปแบบที่ยาวขึ้น ใช้เครื่องหมายคำพูดสามตัวพร้อม f นำหน้าได้ สะดวกสำหรับข้อความหลายบรรทัด รายงาน และแม่แบบอีเมล
Hi Alice, Your order #4821 has been confirmed. Total: $37.50 Thank you for shopping with us!
นี่คือตัวอย่างที่ใช้งานได้จริง: การสร้างตาราง ตัวกำหนดการจัดแนวช่วยให้แต่ละคอลัมน์ตรงกันอย่างเรียบร้อย
Product Price Qty Total ------------------------------------- Laptop 999.99 1 999.99 Mouse 29.50 3 88.50 Keyboard 74.00 2 148.00
x=42 y=17 x + y=59
แบบฝึกหัด
สร้างตัวแปร item ให้มีค่า "Cappuccino" และ price ให้มีค่า 4.5 จากนั้นใช้ f-string แสดงบรรทัดใบเสร็จในรูปแบบนี้ให้ตรงทุกตัวอักษร:
Cappuccino .......... $4.50ราคาต้องแสดงทศนิยม 2 ตำแหน่งพอดี ใช้สตริง " .......... $" คั่นระหว่างชื่อกับราคา
สร้างตัวแปร population ให้มีค่า 7900000000 แล้วแสดงด้วย f-string ที่มีจุลภาคคั่นหลัก ให้ได้ผลลัพธ์:
World population: 7,900,000,000สร้างตัวแปรสามตัว: name = "Alice", score = 95.8 และ grade = "A+" แล้วแสดงแถวตารางที่จัดรูปแบบดังนี้:
ผลลัพธ์ที่ต้องได้ (ตัวอักษร | เป็นส่วนหนึ่งของผลลัพธ์):
| Alice | 95.8 | A+ |โค้ดด้านล่างควรแสดง "Hello, Sam! You scored 92.5%." แต่กลับแสดงวงเล็บปีกกาออกมาแทนค่า หาบั๊กแล้วแก้ให้ถูกต้อง
สร้างตัวแปรเหล่านี้:
first_name = "Jordan"items = 3total = 89.95จากนั้นใช้ f-string หลายบรรทัด (เครื่องหมายคำพูดสามตัว) แสดงข้อความนี้ให้ตรงทุกตัวอักษร:
Hi Jordan,
Thank you for your purchase of 3 items.
Your total is $89.95.
Have a great day!ยอดรวมต้องแสดงทศนิยม 2 ตำแหน่งพอดี