Python - เข้าร่วมกับ newline


92

ในคอนโซล Python เมื่อฉันพิมพ์:

>>> "\n".join(['I', 'would', 'expect', 'multiple', 'lines'])

ให้:

'I\nwould\nexpect\nmultiple\nlines'

แม้ว่าฉันคาดหวังว่าจะได้เห็นผลลัพธ์ดังกล่าว:

I
would
expect
multiple
lines

ฉันขาดอะไรไปที่นี่?

คำตอบ:


90

คอนโซลกำลังพิมพ์การแสดงไม่ใช่สตริงเอง

หากคุณขึ้นต้นด้วยprintคุณจะได้รับสิ่งที่คุณคาดหวัง

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


42

คุณลืมprintผลลัพธ์ สิ่งที่คุณจะได้รับคือPในRE(P)Lและไม่ได้ผลการพิมพ์ที่เกิดขึ้นจริง

ใน Py2.x คุณควรจะเป็นเช่นนั้น

>>> print "\n".join(['I', 'would', 'expect', 'multiple', 'lines'])
I
would
expect
multiple
lines

และใน Py3.X การพิมพ์เป็นฟังก์ชันดังนั้นคุณควรทำ

print("\n".join(['I', 'would', 'expect', 'multiple', 'lines']))

ตอนนี้เป็นคำตอบสั้น ๆ Python Interpreter ของคุณซึ่งจริงๆแล้วเป็น REPL มักจะแสดงการเป็นตัวแทนของสตริงแทนที่จะเป็นเอาต์พุตที่แสดงจริง การเป็นตัวแทนคือสิ่งที่คุณจะได้รับจากreprคำแถลง

>>> print repr("\n".join(['I', 'would', 'expect', 'multiple', 'lines']))
'I\nwould\nexpect\nmultiple\nlines'

14

คุณต้องprintได้รับผลลัพธ์นั้น
คุณควรทำ

>>> x = "\n".join(['I', 'would', 'expect', 'multiple', 'lines'])
>>> x                   # this is the value, returned by the join() function
'I\nwould\nexpect\nmultiple\nlines'
>>> print x    # this prints your string (the type of output you want)
I
would
expect
multiple
lines

4

คุณต้องพิมพ์:

In [22]: "\n".join(['I', 'would', 'expect', 'multiple', 'lines'])
Out[22]: 'I\nwould\nexpect\nmultiple\nlines'

In [23]: print "\n".join(['I', 'would', 'expect', 'multiple', 'lines'])
I
would
expect
multiple
lines

4

เมื่อคุณพิมพ์ด้วยสิ่งนี้print 'I\nwould\nexpect\nmultiple\nlines'คุณจะได้รับ:

I
would
expect
multiple
lines

\nเป็นตัวอักษรบรรทัดใหม่ใช้เป็นพิเศษสำหรับการทำเครื่องหมาย End-of-TEXT หมายถึงจุดสิ้นสุดของบรรทัดหรือข้อความ ลักษณะนี้ใช้ร่วมกันในหลายภาษาเช่น C, C ++ เป็นต้น

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