閉じる

Pythonのprint()で改行しない方法: end=”で連続出力

Pythonの標準出力はとても手軽ですが、print()が毎回改行してしまい、値を横に並べたいときや進捗を更新したいときに困ることがあります。

本記事では、初心者の方にも分かりやすいように、end=''を使って改行を抑制する基本から、sepとの違い、上書き表示やフラッシュなどの実用テクニックまで、段階を踏んで丁寧に解説します。

Pythonのprint()はなぜ改行するか

デフォルト引数end=’\n’の意味

print()は関数で、デフォルト引数により出力の挙動が決まります。

とくに行末の文字を決めるend既定で改行文字'\n'になっているため、何も指定しないと1回のprint()で1行ずつ出力されます。

Python
# 何も指定していないprint()は、行末に改行('\n')を付けます
print("A")
print("B")

# これと同じ意味です
print("C", end="\n")
print("D", end="\n")
実行結果
A
B
C
D

‘\n’の正体

改行文字'\n'は「次の行に移る」制御文字です。

WindowsでもmacOSでもprint()に渡すのは'\n'で問題ありません。

コンソール側で環境に応じた改行に変換されて表示されます。

実はprint()は複数の値を受け取れる

print()は複数の値をカンマ区切りで受け取り、間はsep引数で区切られます。

これは後ほど詳しく説明しますが、まずは行末を制御するendを理解しましょう。

改行を消すにはend=”にする

改行を消したい場合は、end=''と空文字を指定します。

すると行末に何も付かないため、次のprint()が同じ行の続きに出力されます。

Python
# 行末に何も付けず、次のprint()を同じ行に続けます
print("Hello", end="")   # 改行しない
print("World")           # ここで初めて改行されます(デフォルトのend='\n')
実行結果
HelloWorld

うっかり同じ行に出続ける問題

end=''を使った後に改行を入れないままだと、以降の出力も同じ行に続いてしまいます。

意図した場所で明示的にprint()を1回だけ呼んで改行を確定させるのがコツです。

end=”で改行しないprintの書き方

基本構文とコード例

print()の主な引数は次のようになっています。

ここではendだけ覚えれば十分です。

Python
# print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
# 最低限 覚えるのは sep と end

基本的な使い方は次の通りです。

Python
# 改行しない基本例
print("A", end="")   # 改行しない
print("B", end="")   # 改行しない
print("C")           # ここで改行する(デフォルトend='\n')
実行結果
ABC

よく使うendの値と効果

endに指定する値効果の概要
'\n'改行する(デフォルト)
''改行しないで続ける
' '行末にスペースを1つ入れる
'\t'行末にタブを入れる
'\r'行頭に戻る(同じ行を上書き、後述)

上書き表示に使う'\r'は少し特殊なので、専用のセクションで詳しく扱います。

end=”で連続出力する

文字を1つずつ同じ行に連続して出したい場面ではend=''が活躍します。

Python
# 文字を連続して出力
for ch in ["a", "b", "c", "d"]:
    print(ch, end="")  # 改行せずに連結
# 行を確定するための明示的な改行
print()
実行結果
abcd

数値や記号も同様に連結できる

print()はオブジェクトを文字列化して出力するため、数値でも同じ書き方で横並びにできます。

ループで番号を横に並べる

番号を横に並べ、間にはスペースを入れるのが実務でよくあるパターンです。

Python
# 1から5までを半角スペース区切りで同じ行に出力
for i in range(1, 6):
    print(i, end=" ")  # 末尾にスペースを入れ、改行はしない
# 最後に改行を入れて行を確定
print()
実行結果
1 2 3 4 5

最後の余分なスペースが気になる場合

見た目だけの問題ですが、最後のスペースを避けたい場合は、ループ内で条件分岐するか、sepを使って一括で文字列化する方法もあります。

次章でsepを扱います。

sepとendの違いを理解する

sepで値の区切りを調整する

sepは複数の引数を渡したときの「値と値の間の区切り文字」です。

デフォルトは半角スペースです。

Python
# 3つの値の間をハイフンでつなぐ
print("A", "B", "C", sep="-")
実行結果
A-B-C

endで行末の文字を制御する

endは「行の最後に付く文字」です。

次の出力が同じ行に続くか、改行されるかはここで決まります。

Python
# 行末に感嘆符を付け、次のprintを同じ行に続ける
print("Hello", "Python", end="!")
print("続きです")  # 同じ行に続いて表示される
実行結果
Hello Python!続きです

sepとendを同時に指定する例

sependは同時に使えます。

値同士の区切りと行末の扱いを一度に明確にできます。

Python
# 値はハイフンで区切り、行末にパイプを付ける
print(1, 2, 3, sep="-", end="|")
print("done")  # 同じ行に続いて出る
実行結果
1-2-3|done

役割の違いを一目で把握する

目的使う引数影響する場所出力イメージ
値と値の区切りを変えるsep値の間print("A","B","C", sep=",")A,B,C
行の終わりを変えるend行末print("A","B", end="!")A B!(改行なし)

進捗表示や上書き表示のテクニック

end=’\r’で同じ行に上書き表示

キャリッジリターン'\r'は「行頭に戻る」制御文字です。

これをendに使うと、同じ行に出力を上書きして進捗表示などができます。

Python
import time

# 進捗を同じ行で更新していく例
for pct in range(0, 101, 20):
    # 行頭に戻して同じ場所へ上書き。flush=Trueで即時反映します
    print(f"Progress: {pct:3d}%", end="\r", flush=True)
    time.sleep(0.2)

# 最後に確定表示して改行
print("Progress: 100%")
実行結果
Progress: 100%

WindowsやIDEでの注意点

'\r'は一般的なターミナルで動作しますが、一部のIDEやログビューアでは意図通り上書きされず、すべての状態が縦に並んでしまうことがあります。

その場合は専用の進捗ライブラリを使うか、環境設定を見直すと良いです。

flush=Trueで即時出力する

print()通常バッファリングされ、改行が来るまで画面に出ないことがあります。

end=''end='\r'を使って「改行しない」出力をする場合は、flush=Trueを併用すると更新がすぐ反映されます。

Python
import time

# flush=Falseだと環境によっては最後まで表示されないことがある
for i in range(3):
    print(i, end=" ", flush=True)  # 即時に出す
    time.sleep(0.5)

# 行を整えるために改行
print()
実行結果
0 1 2

sys.stdout.flush()でもOK

print(..., flush=True)の代わりに、sys.stdout.write()sys.stdout.flush()を使う方法もあります。

学習初期はprint()flush=Trueが簡単です。

最後に改行を入れるベストプラクティス

改行しない出力を続けたあと、そのままだと次のプロンプトやログが同じ行に混ざります。

明示的に1回だけprint()を呼んで改行する習慣をつけると読みやすさが保てます。

Python
# 横並び出力のあとに改行を1回
for i in range(5):
    print(i, end=" ")
print()  # ここで行を確定

print("次の処理に進みます")
実行結果
0 1 2 3 4 
次の処理に進みます

まとめて文字列を作る選択肢

大量の値を横並びにするなら、join()で文字列を作ってから一度だけprint()する方法もあります。

処理が軽く、最後のスペース問題も避けられます。

Python
# 最後に余分なスペースを入れずに出す一例
nums = [str(i) for i in range(1, 6)]
print(" ".join(nums))  # 1回のprintで改行も済む
実行結果
1 2 3 4 5

まとめ

本記事では、print()が自動で改行する理由と、その制御方法を丁寧に解説しました。

要点は次の通りです。

print()は既定でend='\n'のため改行します。

改行を抑えたいときはend=''、横並びの可読性を上げたいときはend=' 'のように行末の文字を指定します。

複数値の間を調整したいときはsep、行末を調整したいときはendと役割を分けて使います。

進捗の上書き表示にはend='\r'flush=Trueを併用し、最後にprint()で改行して行を整えるのが実践的なベストプラクティスです。

これらを使い分ければ、出力は思い通りにコントロールできます。

この記事を書いた人
エーテリア編集部
エーテリア編集部

人気のPythonを初めて学ぶ方向けに、文法の基本から小さな自動化まで、実際に手を動かして理解できる記事を書いています。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!