回答:
あなたの結果を達成するためのいくつかの方法があります。あなたのケースの解決策だけが必要な場合は、@ Antが言及しているように文字列乗算を使用してください。これは、各ステートメントが同じ文字列を出力する場合にのみ機能します。これは、任意の長さの文字列の乗算で機能することに注意してください(例:機能します)。print
'foo' * 20
>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa
これを一般的に行いたい場合は、文字列を作成し、それを1回印刷します。これにより、文字列のメモリが少し消費されますが、への呼び出しは1回だけ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+でfrom __future__ import print_function
始まり)でのみ機能します。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
それらを一度に1つずつ表示する場合は、次のようにします。
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
ワオ!!!
それはかなりです、長い時間前に
さて、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 = '$'やend = '。'のように。またはend = 'Hello'
file=sys.stdout
これはデフォルト値、システム標準出力です
この引数を使用すると、次のような出力ファイルストリームを作成できます。
print("I am a Programmer", file=open("output.txt", "w"))
このコードにより、プログラマーである出力 が保存されるoutput.txtという名前のファイルが作成されます
flush = False
これは、flush = Trueを使用したデフォルト値であり、ストリームを強制的にフラッシュできます
"".join("a" for i in xrange(20))
ます。("a" * 20
単純化した例だと思うので、を実行するよりもはるかに柔軟性があります)。