antipattern ทั่วไปใน Python คือการต่อลำดับของสตริงโดยใช้+
ในลูป สิ่งนี้ไม่ดีเนื่องจากล่าม Python ต้องสร้างออบเจ็กต์สตริงใหม่สำหรับการวนซ้ำแต่ละครั้งและจะใช้เวลากำลังสอง (เห็นได้ชัดว่า CPython เวอร์ชันล่าสุดสามารถปรับให้เหมาะสมได้ในบางกรณี แต่การใช้งานอื่น ๆ ไม่สามารถทำได้ดังนั้นโปรแกรมเมอร์จึงไม่สามารถพึ่งพาสิ่งนี้ได้) ''.join
เป็นวิธีที่ถูกต้องในการดำเนินการนี้
อย่างไรก็ตามฉันเคยได้ยินมาว่า ( รวมถึงที่นี่ใน Stack Overflow ) ว่าคุณไม่ควรใช้+
สำหรับการต่อสายอักขระ แต่ควรใช้''.join
หรือใช้สตริงรูปแบบแทน ฉันไม่เข้าใจว่าเหตุใดจึงเป็นเช่นนี้หากคุณเชื่อมต่อเพียงสองสตริง ถ้าความเข้าใจของฉันถูกต้องก็ไม่ควรใช้เวลาในการกำลังสองและผมคิดว่าa + b
เป็นที่สะอาดและอ่านได้มากขึ้นกว่าหรือ''.join((a, b))
'%s%s' % (a, b)
เป็นแนวทางปฏิบัติที่ดีที่จะใช้+
เพื่อเชื่อมสองสตริงเข้าด้วยกันหรือไม่? หรือมีปัญหาที่ฉันไม่ทราบ?
+
เร็วขึ้นหรือช้าลง? และทำไม?
In [2]: %timeit "a"*80 + "b"*80
1000000 loops, best of 3: 356 ns per loop
In [3]: %timeit "%s%s" % ("a"*80, "b"*80)
1000000 loops, best of 3: 907 ns per loop
In [3]: %timeit "%s%s" % (a, b) 1000000 loops, best of 3: 590 ns per loop
In [4]: %timeit a + b 10000000 loops, best of 3: 147 ns per loop
__str__
แต่การใช้ประโยชน์จากแปลงชนิดอัตโนมัติด้วย ดูคำตอบของฉันสำหรับตัวอย่าง