เราสามารถสอดแทรกค่าข้อมูลเป็นสตริงโดยใช้รูปแบบต่างๆ เราสามารถใช้สิ่งนี้เพื่อถอดรหัสโค้ด สร้างรายงาน แบบฟอร์ม และผลลัพธ์อื่นๆ ในหัวข้อนี้ เราจะเห็นสามวิธีในการจัดรูปแบบสตริงและวิธีสอดแทรกค่าข้อมูลให้เป็นสตริง
Python มีสามวิธีในการจัดรูปแบบสตริง:
-
% - โรงเรียนเก่า (รองรับใน Python 2 และ 3)
-
() - รูปแบบใหม่ (Python 2.6 ขึ้นไป)
-
{} - f-strings (Python 3.6 ขึ้นไป)
แบบเก่า:%
รูปแบบเก่าของการจัดรูปแบบสตริงมีรูปแบบข้อมูล format_string % สตริงรูปแบบเป็นเพียงลำดับการแก้ไข
ไวยากรณ์ | คำอธิบาย |
---|---|
%s | สตริง |
%d | ทศนิยม |
%x | hexa-int |
%o | octal-int |
%f | ทศนิยมลอย |
%e | เลขชี้กำลัง-float |
%g | ทศนิยมหรือเลขชี้กำลัง-float |
%% | ตัวอักษร% |
# การพิมพ์จำนวนเต็มที่มี % style type.print('output \nprinting a number in string format %s' % 42)print('printing a number in string decimal %d' % 42)print('printing a number in string hexa-int %x' % 42)print('การพิมพ์ตัวเลขในสตริง exponential-float %g' % 42)
ผลลัพธ์
การพิมพ์ตัวเลขในรูปแบบสตริง 42การพิมพ์ตัวเลขในสตริงทศนิยม 42การพิมพ์ตัวเลขในสตริง hexa-int 2aการพิมพ์ตัวเลขในสตริง exponential-float 42
การแก้ไขสตริงและจำนวนเต็มด้วยรูปแบบเก่า %
%s ภายในสตริงหมายถึงการแก้ไขสตริง จำนวน % ที่ปรากฏในสตริงต้องตรงกับจำนวนของรายการข้อมูลหลังจาก % ที่ตามหลังสตริง
รายการข้อมูลเดียวทำทันทีหลังจาก % สุดท้ายนั้น ต้องจัดกลุ่มข้อมูลหลายรายการเป็นทูเพิล ดูตัวอย่างด้านล่าง
คุณยังสามารถเพิ่มค่าอื่นๆ ในสตริงรูปแบบระหว่าง % และตัวระบุประเภทเพื่อระบุความกว้างต่ำสุดและสูงสุด การจัดตำแหน่ง และการเติมอักขระได้
<ก่อน>1. + หมายถึง จัดชิดขวา2. - หมายถึง ชิดซ้าย3. . หมายถึง minwidth และ maxchars.4 แยกจากกัน minwidth หมายถึงความกว้างของฟิลด์ mimimu ที่จะใช้5 maxchars หมายถึงจำนวนอักขระ/หลักที่จะพิมพ์จากค่าข้อมูล
player ='Roger Federer'country ='Legend'titles =20# note โปรดลองสิ่งนี้ใน Python 2 เท่านั้น หากคุณใช้งานเอาต์พุต Python3 สำหรับคำสั่งด้านล่างจะแตกต่างกันมากprint('Output \n** * นักเทนนิส %s จาก %s ได้รับรางวัล %d ชื่อ ' %(ผู้เล่น, ประเทศ, ชื่อ)) พิมพ์ ('%s' % ผู้เล่น) # พิมพ์ playerprint('%5s' % ผู้เล่น) # พิมพ์ชื่อของผู้เล่นพิมพ์ (' %-7s' % ผู้เล่น) # นามสกุลของผู้เล่นพิมพ์ ('% 5.7s' % ผู้เล่น) # นามสกุลของผู้เล่นที่มีช่องว่างนำหน้า 5 อัน
ผลลัพธ์
*** นักเทนนิส Roger Federer จาก Legend คว้า 20 รายการRoger FedererRoger FedererRoger FedererRoger F
การแก้ไขสตริงและจำนวนเต็มด้วยรูปแบบใหม่:{}
หากคุณใช้ Python 3.5 หรือเวอร์ชันที่สูงกว่า คุณสามารถใช้การจัดรูปแบบ “รูปแบบใหม่” ที่อธิบายไว้ในส่วนด้านล่าง
การจัดรูปแบบ “{}” มีไวยากรณ์เป็น format_string.format(data)
โปรดจำไว้ว่า อาร์กิวเมนต์ของฟังก์ชัน format() จะต้องอยู่ในลำดับเนื่องจากตัวยึดตำแหน่ง {} ในสตริงรูปแบบ บางครั้งเพื่อให้สามารถอ่านได้มากขึ้น คุณสามารถส่งพจนานุกรมหรืออาร์กิวเมนต์ที่มีชื่อไปยังรูปแบบได้
player ='Roger Federer'player ='Roger_Federer'country ='Legend'titles =20print('Output \n{}'.format(player))print(' *** นักเทนนิส {} จาก {} มี ได้รับรางวัล {} ชื่อ '.format(player,country,titles))# positonal argumentsprint(' *** Tennis player {1} From {2} ได้รับรางวัล {0} titles '.format(titles,player,country))# ชื่ออาร์กิวเมนต์ (' *** นักเทนนิส {ผู้เล่น} จาก {ประเทศ} ได้รับรางวัล {ชื่อ} ชื่อ '.format (ผู้เล่น ='โรเจอร์เฟเดอเรอร์' ประเทศ ='ตำนาน' ชื่อ =20)) # อาร์กิวเมนต์พจนานุกรมพิมพ์ (' * ** นักเทนนิส {player} จาก {country} ได้รับรางวัล {titles} ชื่อ '.format(player ='Roger Federer',country ='Legend',titles =20))# การจัดตำแหน่งด้านซ้าย '<' (ค่าเริ่มต้น) พิมพ์ ( ' *** นักเทนนิส {} จาก {:<5s} ได้รับรางวัล {:<5d} ชื่อ '.format(player,country,titles))# การจัดตำแหน่งซ้าย '<' (ค่าเริ่มต้น)print(' *** นักเทนนิส {} จาก {:<5s} ได้รับรางวัล {:<5d} ชื่อ '.format(player,country,titles))# Alignment center '^'print(' *** นักเทนนิส {} จาก {:^10s} มี ได้รับรางวัล {:^10d} ชื่อ '.format(player,country,title s)) # การจัดตำแหน่งขวา '>'print(' *** นักเทนนิส {} จาก {:>10s} ได้รับรางวัล {:>10d} ชื่อ '.format (ผู้เล่น, ประเทศ, ชื่อ))
ผลลัพธ์
Roger_Federer*** นักเทนนิส Roger_Federer From Legend ได้รับรางวัล 20 รายการ*** นักเทนนิส Roger_Federer From Legend ได้รับรางวัล 20 รายการ*** นักเทนนิส Roger Federer จาก Legend ได้รับรางวัล 20 รายการ*** นักเทนนิส Roger Federer จาก Legend ได้รับ 20 รายการ *** นักเทนนิส Roger_Federer จาก Legend ได้รับรางวัล 20 รายการ *** นักเทนนิส Roger_Federer From Legend ได้รับรางวัล 20 รายการ *** นักเทนนิส Roger_Federer จาก Legend ได้รับรางวัล 20 รายการ *** นักเทนนิส Roger_Federer จาก Legend ได้รับรางวัล 20 เรื่อง
การแก้ไขสตริงและจำนวนเต็มด้วยรูปแบบล่าสุด:f-strings
f-strings ปรากฏใน Python 3.6 และในไม่ช้าก็กลายเป็นวิธีการจัดรูปแบบสตริงที่แนะนำ โดยส่วนตัวแล้วฉันใช้รูปแบบนี้ในการทำ f-string:
1. ใช้ตัวอักษร f/F ก่อนเริ่มต้น/ใบเสนอราคาเริ่มต้น
2. รวมชื่อตัวแปรหรือนิพจน์ภายในวงเล็บปีกกา ({}) เพื่อรับค่าลงในสตริง
player ='Roger_Federer'country ='Legend'titles =20print(f"Output \n *** Tennis player {player} จาก {country} ได้รับรางวัล {titles} titles ")print(f" *** I หวังว่า {ผู้เล่น} จะชนะอีก {ชื่อ - 10} ชื่อ ") พิมพ์ (f" {'*' * 3} นักเทนนิส {player.upper()} จาก {ประเทศ:.^10} ได้รับรางวัล {ชื่อ} ชื่อ")
ผลลัพธ์
*** นักเทนนิส Roger_Federer From Legend คว้า 20 รายการ*** ฉันหวังว่า Roger_Federer จะได้รับอีก 10 รายการ*** นักเทนนิส ROGER_FEDERER จาก ..Legend.. คว้า 20 รายการ
เมื่อเราครอบคลุมพื้นฐานแล้ว เรามาพูดถึงปัญหาแบบเรียลไทม์กันดีกว่า และเหตุผลที่ฉันแนะนำให้เริ่มใช้สตริงที่จัดรูปแบบแล้ว
titles =[('federer', 20),('nadal', 20),('djokovic', 17),]print('Output\n')for i, (ผู้เล่น, ชื่อ) ในการแจกแจง ( titles):print('#%d:%-10s =%d' % (i + 1,player.title(),round(titles)))
ผลลัพธ์
#0:federer =20#1:nadal =20#2:djokovic =17
เห็นได้ชัดว่าเมื่อส่งรายงานไปยังที่สูงกว่าไม่ต้องการเห็นดัชนีเริ่มต้นที่ 0 พวกเขาต้องการเริ่มต้นที่ 1.Roger Federer เป็นตำนานแห่งเทนนิสโดยส่วนตัวแล้วฉันต้องการแสดงให้เขาเป็นที่ 1 แทนที่จะเป็น #0
ตอนนี้เพื่อทำการเปลี่ยนแปลงนั้น ดูว่าความสามารถในการอ่านของโค้ดเปลี่ยนแปลงไปอย่างไรในขณะที่ใช้รูปแบบที่เก่ากว่า
titles =[('federer', 20),('nadal', 20),('djokovic', 17),]print('Output\n')for i, (ผู้เล่น, ชื่อ) ในการแจกแจง ( titles):print('#%d:%-10s =%d' % (i + 1,player.title(),round(titles)))
ผลลัพธ์
#1:Federer =20#2:Nadal =20#3:Djokovic =17
โดยสรุป ฉันได้ให้ตัวอย่างเพื่อแสดงว่าเหตุใด f-strings จึงง่ายต่อการจัดการ
old_school_formatting =(' Tennis Legeng คือ %(player)s, '' %(player)s ได้รับรางวัล %(titles)'s title, ''และเขามาจากประเทศ %(country)s.')old_formatted =old_school_formatting % {'player':'Roger Federer','titles':20,'country':'Swiss',}print('Output\n' + old_formatted)
ผลลัพธ์
Tennis Legeng คือ Roger Federer, Roger Federer ได้รับรางวัล 20 รายการ และเขามาจากประเทศสวิสเซอร์แลนด์
new_formatting =(' Tennis Legeng คือ {player}, '' {player} ได้รับรางวัล {titles} รายการ, '' และเขามาจากประเทศ {country}') new_formatted =new_formatting.format(player='Roger Federer ',titles=20,country='Swiss',)print('Output\n' + new_formatted)
ผลลัพธ์
เทนนิส เลเก้น คือ โรเจอร์ เฟเดอเรอร์ โรเจอร์ เฟเดอเรอร์ คว้าแชมป์ 20 รายการ และเขามาจากประเทศสวิสเซอร์แลนด์
รูปแบบนี้มีเสียงรบกวนน้อยกว่าเล็กน้อยเนื่องจากตัดเครื่องหมายคำพูดบางส่วนในพจนานุกรม และอักขระบางตัวในตัวระบุรูปแบบ แต่แทบจะไม่น่าสนใจ