Python3でprintfのように印刷する方法は?


125

Python 2で私は使用しました:

print "a=%d,b=%d" % (f(x,n),g(x,n))

私はもう試した:

print("a=%d,b=%d") % (f(x,n),g(x,n))

11
%printステートメントとは関係なく、常に文字列演算子でした。たとえば、で文字列を作成し、でs="a=%d,b=%d"%(f(x,n),g(x,n))その文字列を印刷できますprint s
chepner 2013年

回答:


207

Python2ではprint、ステートメントを導入するキーワードでした:

print "Hi"

Python3ではprint、次の関数を呼び出すことができます:

print ("Hi")

どちらのバージョンでも、%は、左側に文字列、右側に値または値のタプル、またはマッピングオブジェクト(などdict)を必要とする演算子です。

したがって、行は次のようになります。

print("a=%d,b=%d" % (f(x,n),g(x,n)))

また、Python3以降の推奨事項は、-style {}フォーマットの代わりに-style フォーマットを使用すること%です。

print('a={:d}, b={:d}'.format(f(x,n),g(x,n)))

Python 3.6では、さらに別の文字列フォーマットのパラダイム、f-stringsが導入されています

print(f'a={f(x,n):d}, b={g(x,n):d}')

14
または: print('a={first:4.2f}, b={second:03d}'.format(first=f(x,n),second=g(x,n))) この例は、printfスタイルの修飾子使用しながら、キーワードを使用する方法を示しています。
fbicknel 2014年

2
@rapt、それはいくつかの大きな利点があります。同じフォーマットを複数回または順不同で参照できることも重要です: "{1}、{1}、{0}、および{1}" .format( "eggs"、 "spam")= = "スパム、スパム、卵、スパム"
Xorile博士、18

53

最も推奨される方法は、formatメソッドを使用することです。詳細はこちら

a, b = 1, 2

print("a={0},b={1}".format(a, b))

28

O'ReillyのPython Cookbookの単純なprintf()関数。

import sys
def printf(format, *args):
    sys.stdout.write(format % args)

出力例:

i = 7
pi = 3.14159265359
printf("hi there, i=%d, pi=%.2f\n", i, pi)
# hi there, i=7, pi=3.14

えっと… PRINTそしてFORMAT…?60年以上前のFORTRANの時代に戻る:)
Skeeve

1
O'Reillyのクックブックへのリンクは無効です。
表意文字

22

Python 3.6では、インライン補間用のf文字列が導入されました。さらに良いのは、構文を拡張して、内挿付きの書式指定子も許可することです。私がこれをググっている間私が取り組んでいた何か(そしてこの古い質問に出くわしました!):

print(f'{account:40s} ({ratio:3.2f}) -> AUD {splitAmount}')

PEP 498に詳細があります。そして...それは他の言語のフォーマット指定子で私の不満をソートしました-それ自体が式であることができる指定子を可能にします!わーい!参照:フォーマット指定子


2
注:これは、変数を文字列に注入する最もパフォーマンスの高い方法でもあります。
ロタレティ2017


11

より単純なもの。

def printf(format, *values):
    print(format % values )

次に:

printf("Hello, this is my name %s and my age %d", "Martin", 20)

2

括弧の%外にあるため、呼び出しの結果print(...)変数を挿入しようとしています。が戻るので、これは機能しません。また、この時間までにテンプレートをすでに印刷していて、タイムトラベルが私たちが住む宇宙の法則によって禁止されているという小さな問題もあります。printprint(...)None

印刷する前に文字列を作成できるように、%とそのオペランドを含めて、印刷するすべてのものを呼び出し内に置く必要がありますprint(...)

print( "a=%d,b=%d" % (f(x,n), g(x,n)) )

明確にするために、いくつかの余分なスペースを追加しました(ただし、それらは必要ではなく、一般的には良いスタイルとは見なされていません)。


2

pythonにはprintfがありません...私は驚いています!最高のコードは

def printf(format, *args):
    sys.stdout.write(format % args)

このフォームのため、印刷できません\ n その他すべて。これが、printが悪い演算子である理由です。そしてまた、あなたは特別な形式で引数を書く必要があります。上記の機能に欠点はありません。これは、printf関数の標準的な通常の形式です。


1
簡単に\ n印刷を回避できます。印刷する値の後に「、」を追加するだけです。
Hejazzman

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.