ความแตกต่างระหว่าง% s และ% d ในการจัดรูปแบบสตริง Python คืออะไร


คำตอบ:


194

ใช้สำหรับการจัดรูปแบบสตริง %sทำหน้าที่เป็นตัวยึดสำหรับสตริงในขณะที่%dทำหน้าที่เป็นตัวยึดสำหรับตัวเลข ค่าที่เกี่ยวข้องจะถูกส่งผ่านทางทูเพิลโดยใช้ตัว%ดำเนินการ

name = 'marcog'
number = 42
print '%s %d' % (name, number)

marcog 42จะพิมพ์ โปรดทราบว่าชื่อเป็นสตริง (% s) และตัวเลขเป็นจำนวนเต็ม (% d สำหรับทศนิยม)

ดูรายละเอียดhttps://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting

ใน Python 3 ตัวอย่างจะเป็น:

print('%s %d' % (name, number))

2
ใน Google Chrome: การตั้งค่า >> ค้นหา >> จัดการเครื่องมือค้นหา ... สังเกตว่า%sใช้กับการกำหนดค่าเครื่องมือค้นหาอย่างไร Chrome ใช้%sแทนที่คำหลักที่ป้อนในแถบที่อยู่ Python ใช้%sในลักษณะเดียวกัน ในprint('description: %s' % descrip)ตัว%sดำเนินการจะถูกแทนที่ด้วยสตริงข้อความที่เก็บไว้ในdescripตัวแปร วงเล็บปีกกาป้องกันข้อความแสดงข้อผิดพลาดใน Python 3
noobninja

คุณเรียกสิ่งเหล่านี้ว่า% s,% d ฯลฯ
Chaine

1
@Chaine เรียกว่าตัวยึดตำแหน่งเป็นตัวแปรที่เปลี่ยนได้
ลีโอ

@ ลีโอขอบคุณ!
Chaine

40

จากpython 3 doc

%d เป็นจำนวนเต็มทศนิยม

%s เป็นสตริงหรืออ็อบเจกต์ทั่วไปและในกรณีของอ็อบเจ็กต์จะถูกแปลงเป็นสตริง

พิจารณารหัสต่อไปนี้

name ='giacomo'
number = 4.3
print('%s %s %d %f %g' % (name, number, number, number, number))

การออกจะเป็น

giacomo 4.3 4 4.300000 4.3

อย่างที่คุณเห็น%dจะตัดทอนเป็นจำนวนเต็ม%sจะรักษาการจัดรูปแบบ%fจะพิมพ์เป็นลอยและ%gใช้สำหรับหมายเลขทั่วไป

เห็นได้ชัด

print('%d' % (name))

จะสร้างข้อยกเว้น คุณไม่สามารถแปลงสตริงเป็นตัวเลขได้


สิ่งนี้ต้องการการโหวตเพิ่มขึ้น จะอธิบายว่าจะเกิดอะไรขึ้นหาก%sใช้ตัวเลขแทน
Vikas Prasad

1
ความแตกต่างระหว่าง% d และ% i คืออะไรถ้าทั้งสองจะแปลงเป็นจำนวนเต็ม? % d เปรียบเทียบกับ% i และ% f ได้อย่างไร
srini

36

%s ใช้เป็นตัวยึดสำหรับค่าสตริงที่คุณต้องการแทรกลงในสตริงที่จัดรูปแบบ

%d ใช้เป็นตัวยึดสำหรับค่าตัวเลขหรือทศนิยม

ตัวอย่างเช่น (สำหรับ python 3)

print ('%s is %d years old' % ('Joe', 42))

จะส่งออก

Joe is 42 years old

6
อธิบายปัญหาไม่ได้จริงๆหรือ? ฉันไม่ได้อธิบายปัญหาที่ฉันให้คำตอบที่รัดกุมเพื่อคำถาม คำถามนี้ถามโดยเฉพาะว่า% s และ% d มีไว้เพื่ออะไร
Soviut

2
คุณรู้ความแตกต่างระหว่าง% i และ% d หรือไม่ python รองรับ% i หรือไม่
cryanbhu

11

นี่คือตัวยึดตำแหน่ง:

ตัวอย่างเช่น: 'Hi %s I have %d donuts' %('Alice', 42)

โค้ดบรรทัดนี้จะแทนที่% s ด้วย Alice (str) และ% d ด้วย 42

เอาท์พุต: 'Hi Alice I have 42 donuts'

สิ่งนี้สามารถทำได้โดยใช้ "+" เกือบตลอดเวลา เพื่อให้เข้าใจคำถามของคุณอย่างลึกซึ้งยิ่งขึ้นคุณอาจต้องการตรวจสอบ {} / .format () ด้วย นี่คือตัวอย่างหนึ่ง: การจัดรูปแบบสตริง Python:% เทียบกับ. รูปแบบ

ดูวิดีโอสอน google python @ 40 'ได้ที่นี่มีคำอธิบาย https://www.youtube.com/watch?v=tKTZoB2Vjuk


11

เหล่านี้ล้วนเป็นคำตอบให้ข้อมูล แต่ไม่มีผู้ใดได้รับค่อนข้างที่หลักของสิ่งที่แตกต่างระหว่างและ%s%d

%sบอกจัดรูปแบบการเรียกstr()ฟังก์ชั่นในการโต้แย้งและเนื่องจากเรากำลังบีบบังคับสตริงโดยความหมายเป็นหลักเพียงแค่การแสดง%sstr(arg)

%dในทางกลับกันกำลังเรียกร้องให้int()มีการโต้แย้งก่อนที่จะเรียกstr()เช่นstr(int(arg))นี้จะทำให้เกิดการintบีบบังคับและการstrบีบบังคับ

ตัวอย่างเช่นฉันสามารถแปลงค่าฐานสิบหกเป็นทศนิยม

>>> '%d' % 0x15
'21'

หรือตัดลอย

>>> '%d' % 34.5
'34'

แต่การดำเนินการจะเพิ่มข้อยกเว้นหากอาร์กิวเมนต์ไม่ใช่ตัวเลข

>>> '%d' % 'thirteen'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str

ดังนั้นหากเจตนาเป็นเพียงการเรียกstr(arg)ก็%sเพียงพอแล้ว แต่ถ้าคุณต้องการการจัดรูปแบบเพิ่มเติม (เช่นการจัดรูปแบบทศนิยมทศนิยม) หรือการบังคับอื่น ๆ จำเป็นต้องใช้สัญลักษณ์รูปแบบอื่น

ด้วยสัญกรณ์เมื่อคุณออกจากการจัดรูปแบบที่เริ่มต้นคือf-stringstr

>>> a = 1
>>> f'{a}'
'1'
>>> f'{a:d}'
'1'
>>> a = '1'
>>> f'{a:d}'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Unknown format code 'd' for object of type 'str'

เช่นเดียวกับstring.format; strเริ่มต้นคือ

>>> a = 1
>>> '{}'.format(a)
'1'
>>> '{!s}'.format(a)
'1'
>>> '{:d}'.format(a)
'1'

1
นี่ควรเป็นคำตอบที่ได้รับการยอมรับ เป็นคนเดียวที่อธิบายความแตกต่างได้จริง
พลวง

เนื่องจากฉันตอบช้าไป 9 ปีเป็นเรื่องที่เข้าใจได้ แต่ฉันไม่พอใจกับคำตอบดังนั้นฉันจึงเพิ่มคำตอบเข้าไป
Wyrmwood

10

การจัดรูปแบบสตริง%dและ%s"คำสั่ง" ใช้ในการจัดรูปแบบสตริง %dสำหรับตัวเลขและ%sสำหรับสตริง

ตัวอย่างเช่น:

print("%s" % "hi")

และ

print("%d" % 34.6)

ในการส่งผ่านหลายอาร์กิวเมนต์:

print("%s %s %s%d" % ("hi", "there", "user", 123456)) จะกลับมา hi there user123456


8

%dและ%sเป็นตัวยึดตำแหน่งซึ่งทำงานเป็นตัวแปรที่เปลี่ยนได้ ตัวอย่างเช่นหากคุณสร้างตัวแปร 2 ตัว

variable_one = "Stackoverflow"
variable_two = 45

คุณสามารถกำหนดตัวแปรเหล่านั้นให้กับประโยคในสตริงโดยใช้ทูเพิลของตัวแปร

variable_3 = "I was searching for an answer in %s and found more than %d answers to my question"

โปรดทราบว่า%sใช้ได้กับ String และ%dทำงานกับตัวแปรที่เป็นตัวเลขหรือทศนิยม

หากคุณพิมพ์ออกvariable_3มาจะมีลักษณะเช่นนี้

print(variable_3 % (variable_one, variable_two))

ฉันกำลังค้นหาคำตอบใน StackOverflow และพบคำตอบมากกว่า 45 คำสำหรับคำถามของฉัน


5

เป็นตัวระบุรูปแบบ ใช้เมื่อคุณต้องการรวมค่าของนิพจน์ Python ลงในสตริงโดยบังคับใช้รูปแบบเฉพาะ

ดูDive into Pythonสำหรับการแนะนำโดยละเอียด



2

ในกรณีที่คุณต้องการหลีกเลี่ยง% s หรือ% d แล้ว ..

name = 'marcog'
number = 42
print ('my name is',name,'and my age is:', number)

เอาท์พุต:

my name is marcog and my name is 42

2
คำตอบนี้เกี่ยวข้องกับคำถามอย่างไร? ถามถามเกี่ยวกับการใช้และ%s %d
Mark Dickinson

BTW รหัสที่คุณแสดงไม่ถูกต้องใน Python 3.5.1: printเป็นฟังก์ชันใน Python 3 ไม่ใช่คำสั่ง
Mark Dickinson

ฉันได้แก้ไขโพสต์แล้ว ... โปรดดู อันที่จริงฉันโพสต์ไว้เป็นอีกทางเลือกหนึ่งหากบางคนอาจหลีกเลี่ยงการใช้% d หรือ% s และขอบคุณสำหรับการตรวจสอบข้อผิดพลาด .. ฉันได้แก้ไขโค้ดแล้ว
Sujatha

3
ขอบคุณสำหรับการแก้ไข น่าเสียดายที่นี่ยังไม่ใช่คำตอบสำหรับคำถาม
Mark Dickinson

2

% s ใช้เพื่อเก็บช่องว่างสำหรับสตริง% d ใช้เพื่อเก็บช่องว่างสำหรับตัวเลข

name = "Moses";
age = 23
print("My name is %s am CEO at MoTech Computers " %name)
print("Current am %d years old" %age)
print("So Am %s and am %d years old" %(name,age))

เอาต์พุตโปรแกรม

วิดีโอนี้เจาะลึกเกี่ยวกับเคล็ดลับดังกล่าวhttps://www.youtube.com/watch?v=4zN5YsuiqMA


ยินดีต้อนรับสู่ Stack Overflow! คำตอบของคุณแตกต่างจากอีก 12 ข้ออย่างไร?
Vasil Velichkov

เกือบทุกรูปแบบจะใช้งานได้เหมือนกัน แต่ทั้งหมดที่ฉันต้องการคือยกตัวอย่างเพิ่มเติมเพื่อเพิ่มความเข้าใจ
Noel Moses Mwadende

เยี่ยมมาก! คุณสามารถปรับปรุงคำตอบของคุณได้โดยการเพิ่มผลลัพธ์ของโปรแกรมเป็นข้อความไม่ใช่รูปภาพ
Vasil Velichkov

ขอบคุณสำหรับความกังวลฉันจะทำการเปลี่ยนแปลงบางอย่างคุณยินดีต้อนรับ
Noel Moses Mwadende

1

พูดถึงสิ่งที่ ...
python3.6 มาพร้อมกับf-stringsซึ่งทำให้การจัดรูปแบบง่ายขึ้นมาก!
ตอนนี้ถ้าเวอร์ชัน python ของคุณมากกว่า 3.6 คุณสามารถจัดรูปแบบสตริงของคุณด้วยวิธีการที่มีอยู่เหล่านี้:

name = "python"

print ("i code with %s" %name)          # with help of older method
print ("i code with {0}".format(name))  # with help of format
print (f"i code with {name}")           # with help of f-strings

1

นี่คือตัวอย่างพื้นฐานเพื่อสาธิตการจัดรูปแบบสตริง Python และวิธีใหม่ในการดำเนินการ

my_word = 'epic'
my_number = 1

print('The %s number is %d.' % (my_word, my_number))  # traditional substitution with % operator

// เลขกาพย์คือ 1

print(f'The {my_word} number is {my_number}.')  # newer format string style

// เลขกาพย์คือ 1

ทั้งสองพิมพ์เหมือนกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.