ฉันมีรหัสนี้:
>>> for i in xrange(20):
... print 'a',
...
a a a a a a a a a a a a a a a a a a a a
ฉันต้องการส่งออก'a'
โดยไม่มี' '
สิ่งนี้:
aaaaaaaaaaaaaaaaaaaa
เป็นไปได้ไหม?
ฉันมีรหัสนี้:
>>> for i in xrange(20):
... print 'a',
...
a a a a a a a a a a a a a a a a a a a a
ฉันต้องการส่งออก'a'
โดยไม่มี' '
สิ่งนี้:
aaaaaaaaaaaaaaaaaaaa
เป็นไปได้ไหม?
คำตอบ:
มีหลายวิธีในการบรรลุผลลัพธ์ของคุณ หากคุณแค่ต้องการคำตอบสำหรับกรณีของคุณให้ใช้การคูณสตริงตามที่@Antกล่าวถึง สิ่งนี้จะได้ผลก็ต่อเมื่อแต่ละprint
คำสั่งของคุณพิมพ์สตริงเดียวกัน โปรดทราบว่ามันใช้ได้กับการคูณสตริงความยาวใด ๆ (เช่น'foo' * 20
งาน)
>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa
หากคุณต้องการทำสิ่งนี้โดยทั่วไปให้สร้างสตริงแล้วพิมพ์ครั้งเดียว การดำเนินการนี้จะใช้หน่วยความจำเล็กน้อยสำหรับสตริง แต่จะโทรไปที่เพียงครั้งเดียวprint
เท่านั้น โปรดทราบว่าการต่อสตริงที่ใช้ใน+=
ขณะนี้เป็นแบบเชิงเส้นในขนาดของสตริงที่คุณเชื่อมต่อดังนั้นสิ่งนี้จะรวดเร็ว
>>> for i in xrange(20):
... s += 'a'
...
>>> print s
aaaaaaaaaaaaaaaaaaaa
หรือคุณสามารถทำมันขึ้นโดยตรงโดยใช้sys.stdout เขียน ()ซึ่งprint
เป็นกระดาษห่อหุ้ม สิ่งนี้จะเขียนเฉพาะสตริงดิบที่คุณระบุโดยไม่มีการจัดรูปแบบใด ๆ โปรดทราบว่าจะไม่มีการพิมพ์ขึ้นบรรทัดใหม่เมื่อสิ้นสุด 20 a
วินาที
>>> import sys
>>> for i in xrange(20):
... sys.stdout.write('a')
...
aaaaaaaaaaaaaaaaaaaa>>>
Python 3 เปลี่ยนprint
คำสั่งเป็นฟังก์ชัน print ()ซึ่งให้คุณตั้งค่าend
พารามิเตอร์ คุณสามารถใช้ใน> = 2.6 โดยการนำเข้าจาก__future__
. ฉันจะหลีกเลี่ยงสิ่งนี้ในรหัส 2.x ที่ร้ายแรงเนื่องจากจะทำให้สับสนเล็กน้อยสำหรับผู้ที่ไม่เคยใช้ 3.x อย่างไรก็ตามควรให้คุณได้ลิ้มรสความดีบางอย่างที่ 3.x นำมา
>>> from __future__ import print_function
>>> for i in xrange(20):
... print('a', end='')
...
aaaaaaaaaaaaaaaaaaaa>>>
"".join(...)
แทน
+=
ใน Python เป็นการดำเนินการเวลาคงที่สำหรับการต่ออักขระเดี่ยว
จากPEP 3105: พิมพ์เป็นฟังก์ชันในเอกสารมีอะไรใหม่ใน Python 2.6 :
>>> from __future__ import print_function
>>> print('a', end='')
เห็นได้ชัดว่าใช้งานได้กับ python 3.0 หรือสูงกว่าเท่านั้น (หรือ 2.6+ กับ a from __future__ import print_function
ที่จุดเริ่มต้น) print
คำสั่งที่ถูกถอดออกและกลายเป็นprint()
ฟังก์ชั่นโดยเริ่มต้นในหลาม 3.0
คุณสามารถระงับช่องว่างโดยการพิมพ์สตริงว่างเพื่อ stdout ระหว่างprint
คำสั่ง
>>> import sys
>>> for i in range(20):
... print 'a',
... sys.stdout.write('')
...
aaaaaaaaaaaaaaaaaaaa
อย่างไรก็ตามวิธีแก้ปัญหาที่สะอาดกว่าคือสร้างสตริงทั้งหมดที่คุณต้องการพิมพ์ก่อนแล้วจึงส่งออกด้วยprint
คำสั่งเดียว
sys.stdout.write()
จะสะดวกกว่าในกรณีนี้ อย่างไรก็ตามฉันต้องการแสดงให้เห็นว่าการเขียนสตริงว่างไปยัง stdout ยับยั้งช่องว่างระหว่างองค์ประกอบที่เขียนโดยใช้print
ซึ่งอาจมีประโยชน์ในสถานการณ์ที่คล้ายคลึงกัน
คุณสามารถพิมพ์อักขระ backspace ( '\b'
):
for i in xrange(20):
print '\ba',
ผลลัพธ์:
aaaaaaaaaaaaaaaaaaaa
Python 3.x:
for i in range(20):
print('a', end='')
Python 2.6 หรือ 2.7:
from __future__ import print_function
for i in xrange(20):
print('a', end='')
หากคุณต้องการให้แสดงทีละรายการคุณสามารถทำได้:
import time
import sys
for i in range(20):
sys.stdout.write('a')
sys.stdout.flush()
time.sleep(0.5)
sys.stdout.flush()
จำเป็นต้องบังคับให้เขียนอักขระทุกครั้งที่มีการรันลูป
เช่นเดียวกับหมายเหตุด้านข้าง:
การพิมพ์คือ O (1) แต่การสร้างสตริงแล้วการพิมพ์คือ O (n) โดยที่ n คือจำนวนอักขระทั้งหมดในสตริง ใช่แล้วแม้ว่าการสร้างสตริงจะ "สะอาดกว่า" แต่ก็ไม่ใช่วิธีที่มีประสิทธิภาพที่สุดในการทำเช่นนั้น
วิธีที่ฉันจะทำมีดังนี้:
from sys import stdout
printf = stdout.write
ตอนนี้คุณมี "ฟังก์ชันการพิมพ์" ที่พิมพ์สตริงใด ๆ ที่คุณให้ไว้โดยไม่ต้องส่งอักขระบรรทัดใหม่ทุกครั้ง
printf("Hello,")
printf("World!")
ผลลัพธ์จะเป็น: สวัสดีชาวโลก!
อย่างไรก็ตามหากคุณต้องการพิมพ์จำนวนเต็มจำนวนทศนิยมหรือค่าอื่น ๆ ที่ไม่ใช่สตริงคุณจะต้องแปลงเป็นสตริงด้วยฟังก์ชัน str ()
printf(str(2) + " " + str(4))
ผลลัพธ์จะเป็น: 2 4
ไม่มีอะไร? คุณหมายถึง
>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa
?
มันง่ายมาก
สำหรับเวอร์ชัน python 3+ คุณจะต้องเขียนโค้ดต่อไปนี้เท่านั้น
for i in range(20):
print('a',end='')
เพียงแค่แปลงลูปเป็นรหัสต่อไปนี้คุณไม่ต้องกังวลเรื่องอื่น ๆ
ว้าว!!!
เมื่อนานมาแล้ว
ตอนนี้ในpython 3.xมันจะค่อนข้างง่าย
รหัส:
for i in range(20):
print('a',end='') # here end variable will clarify what you want in
# end of the code
เอาท์พุท:
aaaaaaaaaaaaaaaaaaaa
ข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชัน print ()
print(value1,value2,value3,sep='-',end='\n',file=sys.stdout,flush=False)
ที่นี่ :
value1,value2,value3
คุณสามารถพิมพ์หลายค่าโดยใช้ลูกน้ำ
sep = '-'
3 ค่าจะถูกคั่นด้วยอักขระ "-"
คุณสามารถใช้อักขระใดก็ได้แทนสตริงนั้นเช่น sep = '@' หรือ sep = 'good'
end='\n'
ตามค่าเริ่มต้นของฟังก์ชันการพิมพ์จะใส่อักขระ '\ n' ที่ส่วนท้ายของเอาต์พุต
แต่คุณสามารถใช้อักขระหรือสตริงใดก็ได้โดยเปลี่ยนค่า end variale
เช่น end = '$' หรือ end = '.' หรือ end = 'สวัสดี'
file=sys.stdout
นี่คือค่าดีฟอลต์เอาต์พุตมาตรฐานของระบบ
การใช้อาร์กิวเมนต์นี้คุณสามารถสร้างสตรีมไฟล์เอาต์พุตเช่น
print("I am a Programmer", file=open("output.txt", "w"))
ด้วยรหัสนี้คุณจะสร้างไฟล์ชื่อoutput.txtที่ซึ่งผลลัพธ์ของคุณ ฉันเป็นโปรแกรมเมอร์จะถูกเก็บไว้
flush = False
เป็นค่าเริ่มต้นโดยใช้flush = Trueคุณสามารถบังคับให้ล้างสตรีมได้
ง่ายอย่างนั้น
def printSleeping():
sleep = "I'm sleeping"
v = ""
for i in sleep:
v += i
system('cls')
print v
time.sleep(0.02)
"".join("a" for i in xrange(20))
ฉันประหลาดใจว่าไม่มีใครที่ยังไม่ได้กล่าวถึง (มีความยืดหยุ่นมากกว่าการทำเพียง"a" * 20
อย่างเดียวเนื่องจากฉันคิดว่าเป็นตัวอย่างที่เรียบง่าย)