改行やスペースを入れずに印刷するには?

疑問はタイトルにあります。

私は[tag:Python]でそれをしたいと思っています。この例で[tag:C]でやりたいこと。

Cでは

#include <stdio.h>

int main() {
    int i;
    for (i=0; i<10; i++) printf(".");
    return 0;
}

を出力します。

..........

Pythonの場合。

>>> for i in xrange(0,10): print '.'
.
.
.
.
.
.
.
.
.
.
>>> for i in xrange(0,10): print '.',
. . . . . . . . . .

Python では print\n やスペースが追加されてしまいますが、これを回避するにはどうしたらいいですか?さて、これは単なる例です。最初に文字列を作ってから、それをプリントすればいいなんて言わないでください。私が知りたいのは、文字列を stdout に追加する方法です。

ソリューション

一般的な方法

import sys
sys.stdout.write('.')

に電話する必要がある場合もあります。

sys.stdout.flush()

を呼び出して、stdout がすぐにフラッシュされるようにする必要があるかもしれません。

Python 2.6+の場合

Python 2.6 からは、Python 3 の print 関数をインポートすることができます。

from __future__ import print_function

これにより、以下の Python 3 のソリューションを使用することができます。

Python 3

Python 3では、 print 文が関数に変更されました。Python 3では、代わりに次のようにできます。

print('.', end='')

これは Python 2 でも動作します。ただし、from __future__ import print_function を使用している必要があります。

バッファリングに問題がある場合は、flush=Trueキーワード引数を追加することで、出力をフラッシュすることができます。

print('.', end='', flush=True)

しかし、flush キーワードは、Python 2 の __future__ からインポートされたバージョンの print 関数では利用できないことに注意してください; Python 3 でのみ、具体的には 3.3 以降で動作します。それ以前のバージョンでは、sys.stdout.flush()を呼び出して手動でフラッシュする必要があります。

ソース

  1. https://docs.python.org/2/library/functions.html#print
  2. https://docs.python.org/2/library/__future__.html
  3. https://docs.python.org/3/library/functions.html#print
解説 (5)

_注:この質問のタイトルは、以前は「How to printf in python?」のようなものでした。

タイトルを見て探しに来る人がいるかもしれないので、Pythonもprintf形式の置換をサポートしています。

>>> strings = [ "one", "two", "three" ]
>>>
>>> for i in xrange(3):
...     print "Item %d: %s" % (i, strings[i])
...
Item 0: one
Item 1: two
Item 2: three

また、文字列の値を簡単に乗算することができます。

>>> print "." * 10
..........
解説 (7)

新しい(Python 3.0以降)print関数には、オプションでendパラメータがあり、終了文字を変更することができます。また、セパレータを表す sep もあります。

解説 (1)