พิมพ์หลายอาร์กิวเมนต์ใน Python


309

นี่เป็นเพียงตัวอย่างรหัสของฉัน:

print("Total score for %s is %s  ", name, score)

แต่ฉันต้องการให้พิมพ์:

"คะแนนรวมสำหรับ (ชื่อ) คือ (คะแนน)"

โดยที่nameตัวแปรในรายการและscoreเป็นจำนวนเต็ม นี่คือ Python 3.3 ถ้ามันช่วยได้

คำตอบ:


559

มีหลายวิธีในการทำเช่นนี้ ในการแก้ไขรหัสปัจจุบันของคุณโดยใช้การจัด%รูปแบบคุณจะต้องส่งผ่าน tuple:

  1. ผ่านมันเป็น tuple:

    print("Total score for %s is %s" % (name, score))

('this',)สิ่งอันดับที่มีลักษณะองค์ประกอบเดียวเช่น

ต่อไปนี้เป็นวิธีทั่วไปอื่น ๆ ในการดำเนินการ:

  1. ส่งต่อเป็นพจนานุกรม:

    print("Total score for %(n)s is %(s)s" % {'n': name, 's': score})

นอกจากนี้ยังมีการจัดรูปแบบสตริงรูปแบบใหม่ซึ่งอาจอ่านง่ายขึ้นเล็กน้อย:

  1. ใช้การจัดรูปแบบสตริงแบบใหม่:

    print("Total score for {} is {}".format(name, score))
  2. ใช้การจัดรูปแบบสตริงแบบใหม่พร้อมตัวเลข (มีประโยชน์สำหรับการเรียงลำดับใหม่หรือพิมพ์หนึ่งครั้งหลาย ๆ ครั้ง):

    print("Total score for {0} is {1}".format(name, score))
  3. ใช้การจัดรูปแบบสตริงแบบใหม่ด้วยชื่อที่ชัดเจน:

    print("Total score for {n} is {s}".format(n=name, s=score))
  4. เชื่อมสตริงเข้าด้วยกัน:

    print("Total score for " + str(name) + " is " + str(score))

สองที่ชัดเจนที่สุดในความคิดของฉัน:

  1. เพียงส่งค่าเป็นพารามิเตอร์:

    print("Total score for", name, "is", score)

    หากคุณไม่ต้องการให้มีการแทรกช่องว่างโดยอัตโนมัติprintในตัวอย่างด้านบนให้เปลี่ยนsepพารามิเตอร์:

    print("Total score for ", name, " is ", score, sep='')

    หากคุณใช้ Python 2 จะไม่สามารถใช้สองอันสุดท้ายได้เนื่องจากprintไม่ใช่ฟังก์ชันใน Python 2 อย่างไรก็ตามคุณสามารถนำเข้าลักษณะการทำงานนี้ได้จาก__future__:

    from __future__ import print_function
  2. ใช้การfจัดรูปแบบ -string ใหม่ใน Python 3.6:

    print(f'Total score for {name} is {score}')

7
แน่นอนว่ายังมีวิธีการที่ไม่ผ่านการอนุมัติแก่ผู้สูงอายุเสมอ:print("Total score for "+str(name)"+ is "+str(score))
งูและคอฟฟี่

5
@SnakesandCoffee: ฉันเพิ่งทำไปprint("Total score for", name, "is", score)
Blender

4
+1 ของฉัน วันนี้ฉันชอบ.format()อ่านมากกว่าเก่ากว่า% (tuple)- แม้ว่าฉันเคยเห็นการทดสอบที่แสดงการ%แก้ไขเร็วขึ้น print('xxx', a, 'yyy', b)ยังเป็นที่ดีสำหรับกรณีที่เรียบง่าย ฉันขอแนะนำให้เรียนรู้.format_map()ด้วยพจนานุกรมเป็นอาร์กิวเมนต์และ'ssss {key1} xxx {key2}'- ดีสำหรับการสร้างข้อความจากแม่แบบ string_template % dictionaryนอกจากนี้ยังมีรุ่นเก่า แต่เทมเพลตนั้นดูไม่สะอาด'ssss %(key1)s xxx %(key2)s'เลย:
pepr

6
FYI จาก Python 3.6 เราได้รับf-stringsดังนั้นตอนนี้คุณสามารถทำได้print(f"Total score for {name} is {score}")โดยไม่ต้องเรียกใช้ฟังก์ชั่นที่ชัดเจน (ตราบเท่าที่nameและscoreอยู่ในขอบเขตที่เห็นได้ชัด)
ShadowRanger

57

มีหลายวิธีในการพิมพ์

ลองมาดูตัวอย่างอื่นกัน

a = 10
b = 20
c = a + b

#Normal string concatenation
print("sum of", a , "and" , b , "is" , c) 

#convert variable into str
print("sum of " + str(a) + " and " + str(b) + " is " + str(c)) 

# if you want to print in tuple way
print("Sum of %s and %s is %s: " %(a,b,c))  

#New style string formatting
print("sum of {} and {} is {}".format(a,b,c)) 

#in case you want to use repr()
print("sum of " + repr(a) + " and " + repr(b) + " is " + repr(c))

EDIT :

#New f-string formatting from Python 3.6:
print(f'Sum of {a} and {b} is {c}')

3
print("sum of {0} and {1} is {2}".format(a,b,c)) overkill คุณสามารถข้ามไปได้print("sum of {} and {} is {}".format(a,b,c)) เว้นแต่ว่าคุณต้องการเปลี่ยนคำสั่งซื้อ
Jean-François Fabre

39

ใช้.format()::

print("Total score for {0} is {1}".format(name, score))

หรือ:

// Recommended, more readable code

print("Total score for {n} is {s}".format(n=name, s=score))

หรือ:

print("Total score for" + name + " is " + score)

หรือ:

`print("Total score for %s is %d" % (name, score))`

21

ใน Python 3.6 f-stringนั้นสะอาดกว่ามาก

ในรุ่นก่อนหน้า:

print("Total score for %s is %s. " % (name, score))

ใน Python 3.6:

print(f'Total score for {name} is {score}.')

จะทำ.

มันมีประสิทธิภาพมากขึ้นและสง่างาม


15

ทำให้มันง่ายฉันเองชอบการเรียงสตริง:

print("Total score for " + name + " is " + score)

มันทำงานได้กับทั้ง Python 2.7 และ 3.X

หมายเหตุ: หากคะแนนเป็นintคุณควรแปลงเป็นstr :

print("Total score for " + name + " is " + str(score))


11

เพียงทำตามนี้

idiot_type = "the biggest idiot"
year = 22
print("I have been {} for {} years ".format(idiot_type, years))

หรือ

idiot_type = "the biggest idiot"
year = 22
print("I have been %s for %s years."% (idiot_type, year))

และลืมคนอื่น ๆ ทั้งหมดไม่เช่นนั้นสมองจะไม่สามารถแมปทุกรูปแบบได้



6

การใช้f-string:

print(f'Total score for {name} is {score}')

หรือ

การใช้.format:

print("Total score for {} is {}".format(name, score))

5

ถ้าscoreเป็นตัวเลขแล้ว

print("Total score for %s is %d" % (name, score))

ถ้าคะแนนเป็นสตริง

print("Total score for %s is %s" % (name, score))

ถ้าคะแนนเป็นตัวเลข%dถ้าเป็นสตริงก็จะเป็น%sถ้าคะแนนเป็นลอยก็เป็นได้%f


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