답변:
결과를 달성하는 방법에는 여러 가지가 있습니다. 귀하의 사례에 대한 해결책을 원한다면 @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__
. 하지만 3.x를 사용 해본 적이없는 사람들에게는 약간 혼란 스러울 것이기 때문에 심각한 2.x 코드에서는 이것을 피하고 싶습니다. 그러나 3.x가 제공하는 장점 중 일부를 맛볼 수 있습니다.
>>> from __future__ import print_function
>>> for i in xrange(20):
... print('a', end='')
...
aaaaaaaaaaaaaaaaaaaa>>>
"".join(...)
대신 사용하십시오 .
+=
되었습니다. Python에서 사용 하는 문자열 연결 은 단일 문자 연결을위한 일정한 시간 작업입니다.
에서 PEP 3105 : 인쇄 기능으로 에서 파이썬 2.6의 새로운 기능 문서 :
>>> from __future__ import print_function
>>> print('a', end='')
분명히 그것은 파이썬 3.0 이상 (또는 from __future__ import print_function
처음 에는 2.6 이상)에서만 작동합니다 . 이 print
명령문은 제거되었으며 print()
Python 3.0에서는 기본적으로 함수 가되었습니다 .
print
명령문 사이의 stdout에 빈 문자열을 인쇄하여 공백을 억제 할 수 있습니다 .
>>> import sys
>>> for i in range(20):
... print 'a',
... sys.stdout.write('')
...
aaaaaaaaaaaaaaaaaaaa
그러나 더 깨끗한 해결책은 먼저 인쇄하려는 전체 문자열을 빌드 한 다음 단일 print
문으로 출력하는 것입니다 .
sys.stdout.write()
이 경우 에만 사용하는 것이 더 편리합니다. 그러나 stdout에 빈 문자열을 작성하면를 사용하여 작성된 요소 사이의 공백이 억제 print
되어 유사한 상황에서 유용 할 수 있음 을 보여주고 싶었습니다 .
백 스페이스 문자 ( '\b'
)를 인쇄 할 수 있습니다 .
for i in xrange(20):
print '\ba',
결과:
aaaaaaaaaaaaaaaaaaaa
한 번에 하나씩 표시하려면 다음을 수행하십시오.
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!")
출력은 다음과 같습니다. Hello, World!
그러나 정수, 부동 소수점 또는 기타 문자열이 아닌 값을 인쇄하려면 str () 함수를 사용하여 문자열로 변환해야합니다.
printf(str(2) + " " + str(4))
출력은 다음과 같습니다. 2 4
이것은 정말 간단합니다
파이썬 3+ 버전의 경우 다음 코드 만 작성하면됩니다.
for i in range(20):
print('a',end='')
루프를 다음 코드로 변환하기 만하면 다른 것에 대해 걱정할 필요가 없습니다.
와!!!
꽤 오래 전 이야
자, 파이썬 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 = '$'또는 end = '.' 또는 end = 'Hello'
file=sys.stdout
이것은 기본값, 시스템 표준 출력입니다.
이 인수를 사용하면 다음 과 같은 출력 파일 스트림을 만들 수 있습니다.
print("I am a Programmer", file=open("output.txt", "w"))
이 코드를 사용하면 output.txt 라는 파일을 생성 할 수 있으며 여기에 I am a Programmer 라는 출력 이 저장됩니다.
flush = False
flush = True 를 사용하는 기본값입니다 . 스트림을 강제로 플러시 할 수 있습니다.
"".join("a" for i in xrange(20))
. ("a" * 20
간단한 예라고 가정하므로 단순히하는 것보다 훨씬 더 유연 합니다.)