Câu trả lời:
Có một số cách để đạt được kết quả của bạn. Nếu bạn chỉ muốn một giải pháp cho trường hợp của mình, hãy sử dụng phép nhân chuỗi như @Ant đề cập. Điều này chỉ hoạt động nếu mỗi print
câu lệnh của bạn in cùng một chuỗi. Lưu ý rằng nó hoạt động để nhân bất kỳ chuỗi độ dài nào (ví dụ: 'foo' * 20
công trình).
>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa
Nếu bạn muốn làm điều này nói chung, xây dựng một chuỗi và sau đó in nó một lần. Điều này sẽ tiêu tốn một chút bộ nhớ cho chuỗi, nhưng chỉ thực hiện một cuộc gọi đến print
. Lưu ý rằng nối chuỗi sử dụng +=
bây giờ là tuyến tính theo kích thước của chuỗi bạn đang nối nên việc này sẽ nhanh.
>>> for i in xrange(20):
... s += 'a'
...
>>> print s
aaaaaaaaaaaaaaaaaaaa
Hoặc bạn có thể làm điều đó trực tiếp hơn bằng cách sử dụng sys.stdout . write () , đó print
là một trình bao bọc xung quanh. Điều này sẽ chỉ viết chuỗi thô bạn cung cấp cho nó, mà không có bất kỳ định dạng. Lưu ý rằng không có dòng mới nào được in ngay cả khi kết thúc 20 a
giây.
>>> import sys
>>> for i in xrange(20):
... sys.stdout.write('a')
...
aaaaaaaaaaaaaaaaaaaa>>>
Python 3 thay đổi print
câu lệnh thành hàm print () , cho phép bạn đặt end
tham số. Bạn có thể sử dụng nó trong> = 2.6 bằng cách nhập từ __future__
. Tôi sẽ tránh điều này trong bất kỳ mã 2.x nghiêm trọng nào, vì nó sẽ hơi khó hiểu đối với những người chưa bao giờ sử dụng 3.x. Tuy nhiên, nó sẽ cung cấp cho bạn một hương vị của một số điều tốt đẹp 3.x mang lại.
>>> from __future__ import print_function
>>> for i in xrange(20):
... print('a', end='')
...
aaaaaaaaaaaaaaaaaaaa>>>
"".join(...)
thay thế.
+=
trong Python là một hoạt động thời gian không đổi để nối một ký tự đơn.
Từ PEP 3105: in dưới dạng Hàm trong tài liệu Có gì mới trong Python 2.6 :
>>> from __future__ import print_function
>>> print('a', end='')
Rõ ràng là chỉ hoạt động với python 3.0 trở lên (hoặc 2.6+ với một from __future__ import print_function
lúc đầu). Câu print
lệnh đã bị xóa và trở thành print()
hàm theo mặc định trong Python 3.0.
Bạn có thể triệt tiêu khoảng trắng bằng cách in một chuỗi trống thành stdout giữa các print
câu lệnh.
>>> import sys
>>> for i in range(20):
... print 'a',
... sys.stdout.write('')
...
aaaaaaaaaaaaaaaaaaaa
Tuy nhiên, một giải pháp sạch hơn là trước tiên hãy xây dựng toàn bộ chuỗi bạn muốn in và sau đó xuất nó bằng một print
câu lệnh duy nhất .
sys.stdout.write()
sẽ thuận tiện hơn trong trường hợp này. Tuy nhiên, tôi muốn chỉ ra rằng việc viết một chuỗi rỗng vào thiết bị xuất chuẩn sẽ triệt tiêu khoảng trắng giữa các phần tử được viết bằng cách sử dụng print
, có thể hữu ích trong các tình huống tương tự.
Bạn có thể in một ký tự backspace ( '\b'
):
for i in xrange(20):
print '\ba',
kết quả:
aaaaaaaaaaaaaaaaaaaa
Nếu bạn muốn chúng xuất hiện cùng một lúc, bạn có thể làm điều này:
import time
import sys
for i in range(20):
sys.stdout.write('a')
sys.stdout.flush()
time.sleep(0.5)
sys.stdout.flush()
là cần thiết để buộc ký tự được viết mỗi khi vòng lặp được chạy.
Cũng như một ghi chú bên lề:
In là O (1) nhưng xây dựng một chuỗi và sau đó in là O (n), trong đó n là tổng số ký tự trong chuỗi. Vì vậy, có, trong khi xây dựng chuỗi là "sạch hơn", đó không phải là phương pháp hiệu quả nhất để làm như vậy.
Cách tôi sẽ làm như sau:
from sys import stdout
printf = stdout.write
Bây giờ bạn có một "chức năng in" in ra bất kỳ chuỗi nào bạn cung cấp mà không trả lại ký tự dòng mới mỗi lần.
printf("Hello,")
printf("World!")
Đầu ra sẽ là: Xin chào, Thế giới!
Tuy nhiên, nếu bạn muốn in các số nguyên, số float hoặc các giá trị không phải chuỗi khác, bạn sẽ phải chuyển đổi chúng thành một chuỗi có hàm str ().
printf(str(2) + " " + str(4))
Đầu ra sẽ là: 2 4
điều này thực sự đơn giản
đối với phiên bản python 3+, bạn chỉ phải viết các mã sau
for i in range(20):
print('a',end='')
chỉ cần chuyển đổi vòng lặp thành các mã sau đây, bạn không phải lo lắng về những thứ khác
Ôi !!!
Nó khá thời gian dài trước đây
Bây giờ, trong python 3.x nó sẽ khá dễ dàng
mã:
for i in range(20):
print('a',end='') # here end variable will clarify what you want in
# end of the code
đầu ra:
aaaaaaaaaaaaaaaaaaaa
Tìm hiểu thêm về hàm print ()
print(value1,value2,value3,sep='-',end='\n',file=sys.stdout,flush=False)
Đây :
value1,value2,value3
bạn có thể in nhiều giá trị bằng dấu phẩy
sep = '-'
3 giá trị sẽ được phân tách bằng ký tự '-'
bạn có thể sử dụng bất kỳ ký tự nào thay vì chuỗi chẵn như sep = '@' hoặc sep = 'good'
end='\n'
theo chức năng in mặc định, đặt charater '\ n' ở cuối đầu ra
nhưng bạn có thể sử dụng bất kỳ ký tự hoặc chuỗi nào bằng cách thay đổi giá trị variale cuối
như end = '$' hoặc end = '.' hoặc kết thúc = 'Xin chào'
file=sys.stdout
Đây là một giá trị mặc định, đầu ra tiêu chuẩn hệ thống
sử dụng đối số này, bạn có thể tạo một luồng tệp đầu ra như
print("I am a Programmer", file=open("output.txt", "w"))
bằng mã này, bạn sẽ tạo một tệp có tên output.txt nơi đầu ra của bạn Tôi là Lập trình viên sẽ được lưu trữ
flush = False
Đó là một giá trị mặc định bằng cách sử dụng flush = True, bạn có thể cưỡng chế luồng
"".join("a" for i in xrange(20))
. (Nó linh hoạt hơn nhiều so với chỉ làm"a" * 20
, vì tôi cho rằng đó là một ví dụ đơn giản).