การแสดงข้อความของภาษา Python

Kritchai Tadbhusinwat
2 min readMar 4, 2022

--

image from https://medium.com/@peter-jp-xie

สำหรับบทความนี้ ก็จะมาพูดถึงเรื่องรูปแบบการแสดงข้อความ(string format) ของภาษา Python ซึ่งได้มีการพัฒนาปรับปรุงให้สามารถใช้งานได้ง่ายมากขึ้นเรื่อย ๆ

โดยจะทำการประกาศตัวแปร string , integer , dictionary เป็นค่าตั้งต้นก่อนดังนี้

# ตัวแปร type : str
f_name = ‘Kritchai’
l_name = ‘Tadbhusinwat’
# ตัวแปร type : int
hight = 175
# ตัวแปร type : dict
profile = {‘fname’:’Kritchai’,
‘lname’:’Tadbhusinwat’,
‘hight’:175}
  1. string concatenation
my_1 = ‘My name is ‘ + f_name + ‘ ‘ + l_name + ‘, hight : ‘ + str(hight)my_2 = ‘My name is ‘ + profile[‘fname’]+ ‘ ‘ + profile[‘lname’] + ‘, hight : ‘ + str(profile[‘hight’])

วิธีนี้จะนำเอา ข้อความหรือตัวแปรที่ต้องการมาต่อกันโดยใช้เครื่องหมาย +

2. % formatting

my_3 = ‘My name is %s %s, hight : %s’ %(f_name,l_name,hight)my_4 = ‘My name is %s %s, hight : %s’ %(profile[‘fname’],profile[‘lname’],profile[‘hight’])

โดยจะใช้
%s แทนตัวแปร string
%d แทนตัวแปร integer
%f แทนตัวแปร floating แบบปัดทศนิยมด้วย
%. จำนวนทศนิยม เช่น %.2f จะแสดงทศนิยม 2 ตำแหน่ง แบบปัดโดยดูจากทศนิยมตำแหน่งที่ 3
%x หรือ %X แทน integer ที่เป็น Hex (เลขฐาน 16)

แต่จะใช้ %s แทนตัวแปรทุกประเภทเลยก็ได้ (ตัวแปร floating จะไม่ปัด เท่าไรก็เท่านั้นเลย)

3. string.format()

# ตามลำดับก่อนหลัง
my_5 = ‘My name is {} {}, hight : {}’.format(f_name,l_name,hight)
# ตามลำดับ index
my_6 = ‘My name is {1} {0}, hight : {2}’.format(l_name,f_name,hight)
my_7 = ‘My name is {fname} {lname}, hight : {hight}’.format(**profile)

วิธีนี้ เริ่มมีใช้ตั้งแต่ version 2.6 จะใช้ {}.format() แสดงค่าตัวแปรที่ต้องการ ตามลำดับตัวแปรใน .format() หรือจะอ้างอิงเป็น index ก็ได้
กรณีเป็นค่าในตัวแปร dictionary จะใช้ {key}

4. f-string

my_8 = f’My name is {f_name} {l_name}, hight : {hight}’my_9 = f’My name is {profile[“fname”]} {profile[“lname”]}, hight : {profile[“hight”]}’

วิธีนี้ เริ่มมีใช้ตั้งแต่ version 3.6 โดยต้องมีตัว f (จะใช้ F ก็ได้) อยู่หน้าข้อความที่ต้องการ และระบุชื่อตัวแปรที่ต้องการใน {}
กรณีเป็นค่าในตัวแปร dictionary ให้สังเกตการใช้ single qoute และ double qoute ด้วย ว่าครอบ string หรือ key ของ dict

โดยตัวแปร my_1 ถึง my_9 จะให้ผลลัพธ์แบบเดียวกัน คือ

My name is Kritchai Tadbhusinwat, hight : 175

หมายเหตุ 1

ทั้ง string.format() และ f-string หากต้องการให้ แสดง { หรือ }
ให้ระบุเป็น
{{ เพื่อแสดง {
}} เพื่อแสดง }

print(f’{f_name}{{แสดงวงเล็บปีกกา}}’)
# Kritchai{แสดงวงเล็บปีกกา}

หมายเหตุ 2

ทั้ง string.format() และ f-string สามารถ ระบุ method หรือจะใช้ slicing ด้วยก็ได้

print(f’{f_name.upper()}’)
# KRITCHAI
print(f’{f_name[2:5]}’)
# itc

จากทั้ง 4 วิธีที่กล่าวมาข้างต้น เราจะมาวัดประสิทธิภาพกันตาม code ด้านล่างนี้

จากผลการ run code จะเห็นว่าวิธี f-string นั้นให้ประสิทธิภาพที่ดีกว่าวิธีอื่น ๆ

ทั้งนี้ยังมีเรื่องการจัดการ การแสดงข้อความในรูปแบบต่าง ๆ อีก เช่น

x = 10/3
y = 5
z = 10_000_000 # ใช้ _ แทน comma ได้
print(x) # 3.3333333333333335
print(y) # 5
print(z) # 10000000
# 0 คือ index ของ (x,y) คือ x; 10=width; .2f = ทศนิยม 2 ตำแหน่ง
print('{0:10.2f}'.format(x,y))
# ' 3.33'
# < คือ ชิดซ้าย; 10=width; .3f = ทศนิยม 3 ตำแหน่ง
print(f'{x:<10.3f}')
# '3.333 '
# ^ คือ ตรงกลาง; 20=width; ,.2f = มีเครื่องหมาย comma ทศนิยม 2 ตำแหน่ง
print(f'{z:^20,.2f}')
# ' 10,000,000.00 '

code ด้านบนนี้เป็นเพียงบางส่วนของการจัดการ การแสดงผลข้อความ ยังมีการจัดรูปแบบอื่น ๆ อีกแต่จะไม่ขอกล่าวในที่นี้

เพิ่มเติม
บางคนอาจจะเคยเห็นตัวอักษร r (มาจาก raw) วางอยู่หน้า string ซึ่งจะเป็นการกำหนดว่า special/escape character ในข้อความนั้น ๆ ไม่ต้องแปลง เช่น

s = r’new line \n , double qoute \”’
print(s)
# new line \n , double qoute \”

--

--

Kritchai Tadbhusinwat
Kritchai Tadbhusinwat

Written by Kritchai Tadbhusinwat

Programmer บริษัทเอกชนที่เป็นส่วนหนึ่งของเบื้องหลังให้กับบริษัทชั้นนำต่าง ๆ และ Tutor สอนกวดวิชาคณิตศาสตร์/ฟิสิกส์ เพื่อเตรียมสอบเข้ามหาวิทยาลัย

No responses yet