Pythonの文字列フォーマットにおける%sと%dの違いは何ですか?


回答:


185

これらは文字列のフォーマットに使用されます。%s文字列%dのプレースホルダーとして機能し、数値のプレースホルダーとして機能します。関連する値は、%演算子を使用してタプルを介して渡されます。

name = 'marcog'
number = 42
print '%s %d' % (name, number)

印刷されますmarcog 42。名前は文字列(%s)であり、数値は整数(10進数の場合は%d)であることに注意してください。

詳細については、https://docs.python.org/3/library/stdtypes.html#printf-style-string-formattingを参照してください。

Python 3では、例は次のようになります。

print('%s %d' % (name, number))

2
Google Chromeの場合:設定>>検索>>検索エンジンの管理... %sが検索エンジン構成でどのように使用されているかに注目してください。Chromeは%s、アドレスバーに入力されたキーワードを置き換えるために使用します。Python %sも同様の方法で使用します。でオペレータに格納されているテキスト文字列に置き換えられます変数。丸括弧はPython 3のエラーメッセージを防ぎますprint('description: %s' % descrip)%sdescrip
。– noobninja

これらを%s、%dなどと呼びますか?
チェーン、

1
@チェーンはプレースホルダーと呼ばれ、置換可能な変数です
Leo

@レオありがとうございます!
チェーン

36

Python 3ドキュメントから

%d 10進整数用

%s 汎用の文字列またはオブジェクト用で、オブジェクトの場合は文字列に変換されます

次のコードを検討してください

name ='giacomo'
number = 4.3
print('%s %s %d %f %g' % (name, number, number, number, number))

出力は

ジャコモ4.3 4 4.300000 4.3

ご覧の%dとおり、整数に切り捨てられ、%sフォーマットが維持さ%fれ、浮動小数点%g数として印刷され、一般的な数値に使用されます

明らかに

print('%d' % (name))

例外を生成します。文字列を数値に変換することはできません


これにより、賛成投票が増えます。%s代わりに数値に使用するとどうなるかを説明します。
Vikas Prasad

1
%dと%iの両方が整数に変換される場合の違いは何ですか?%dは%iおよび%fとどのように比較されますか?
srini

34

%s フォーマットされた文字列に注入する文字列値のプレースホルダーとして使用されます。

%d 数値または小数値のプレースホルダーとして使用されます。

例(python 3の場合)

print ('%s is %d years old' % ('Joe', 42))

出力します

Joe is 42 years old

6
問題を実際に説明していませんか?私は問題を説明しているのではなく、質問に対する簡潔な答え提供ています。この質問では、%sと%dの目的を具体的に尋ねました。
12

2
%iと%dの違いを知っていますか?Pythonは%iをサポートしていますか?
cryanbhu

11

これらはプレースホルダーです:

例えば: 'Hi %s I have %d donuts' %('Alice', 42)

このコード行では、%sをAlice(str)に、%dを42に置き換えます。

出力: 'Hi Alice I have 42 donuts'

ほとんどの場合、これは「+」で実現できます。質問をより深く理解するために、{} / .format()も確認することをお勧めします。次に例を示します。Python文字列のフォーマット:%と.format

こちらのgoogle pythonチュートリアルビデオ@ 40 'もご覧ください。いくつかの説明があり ます。https://www.youtube.com/watch?v = tKTZoB2Vjuk


10

%dそして%s「コマンド」の書式文字列は、文字列をフォーマットするために使用されています。%d数字のためであり、%s文字列のです。

例として:

print("%s" % "hi")

そして

print("%d" % 34.6)

複数の引数を渡すには:

print("%s %s %s%d" % ("hi", "there", "user", 123456)) 戻ります hi there user123456


9

これらはすべて参考の答えですが、どれもかなりの違いが間にあるものの中核になっていません%s%d

%sstr()引数で関数を呼び出すようにフォーマッタに指示%sstr(arg)ます。定義によって文字列に強制的に変換しているため、本質的には単にを実行しています。

%d一方、のようint()にを呼び出す前に引数を呼び出しています。これにより、強制だけでなく強制も発生します。str()str(int(arg))intstr

たとえば、16進数の値を10進数に変換できます。

>>> '%d' % 0x15
'21'

またはフロートを切り捨てます。

>>> '%d' % 34.5
'34'

ただし、引数が数値でない場合、操作は例外を発生させます。

>>> '%d' % 'thirteen'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str

つまり、を呼び出すだけの場合はstr(arg)%sは十分ですが、あなたは余分な(フロート小数点以下の桁数を書式設定など)の書式やその他の強制が必要な場合は、その後、他の形式のシンボルが必要とされています。

ではf-string、あなたがフォーマッタアウトを離れる際の表記、デフォルトですstr

>>> a = 1
>>> f'{a}'
'1'
>>> f'{a:d}'
'1'
>>> a = '1'
>>> f'{a:d}'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Unknown format code 'd' for object of type 'str'

同じことがstring.format;にも当てはまります。デフォルトはstrです。

>>> a = 1
>>> '{}'.format(a)
'1'
>>> '{!s}'.format(a)
'1'
>>> '{:d}'.format(a)
'1'

8

%dそして%s、彼らは交換可能な変数として動作し、プレースホルダです。たとえば、2つの変数を作成した場合

variable_one = "Stackoverflow"
variable_two = 45

変数のタプルを使用して、これらの変数を文字列の文に割り当てることができます。

variable_3 = "I was searching for an answer in %s and found more than %d answers to my question"

これ%sは文字列と%d機能し、数値または10進変数。

印刷variable_3すると次のようになります

print(variable_3 % (variable_one, variable_two))

StackOverflowで回答を探していたところ、質問に対して45以上の回答が見つかりました。


5

それらはフォーマット指定子です。特定のフォーマットを適用して、Python式の値を文字列に含める場合に使用されます。

比較的詳細な紹介については、Dive into Pythonを参照してください。



2

%sまたは%dを避けたい場合。

name = 'marcog'
number = 42
print ('my name is',name,'and my age is:', number)

出力:

my name is marcog and my name is 42

2
この回答は質問とどのような関係がありますか?質問者は%sとの使用について尋ねていました%d
Mark Dickinson

ところで、あなたが示すコードはPython 3.5.1では無効です:printステートメントではなく、Python 3の関数です。
Mark Dickinson、

投稿を編集しました...ご覧ください。実際、私はそれを代替として投稿しました。もし誰かが%dや%sの使用を避けるかもしれない場合。エラー検出に感謝します。コードを編集しました。
Sujatha

3
編集ありがとうございます。残念ながら、これはまだ質問への答えではありません。
Mark Dickinson

2

%sは文字列のスペースを保持するために使用されます%dは数値のためのスペースを保持するために使用されます

name = "Moses";
age = 23
print("My name is %s am CEO at MoTech Computers " %name)
print("Current am %d years old" %age)
print("So Am %s and am %d years old" %(name,age))

プログラム出力

このビデオはそのヒントについて深く掘り下げていますhttps://www.youtube.com/watch?v=4zN5YsuiqMA


Stack Overflowへようこそ!他の12の答えはどうですか?
Vasil Velichkov

ほとんどこれらの形式は同じように機能しますが、理解を深めるためにもっと多くの例を挙げたいだけです
Noel Moses Mwadende

それは素晴らしいことです!プログラムの出力を画像ではなくテキストとして追加することで、回答を改善できます。
Vasil Velichkov

あなたの懸念に感謝します、私はいくつかの変更を行います、あなたは大歓迎です
ノエル・モーゼス・ムワーデンデ

1

といえば...
python3.6が付属しf-stringsているので、フォーマットがはるかに簡単になります!
Pythonバージョンが3.6以降の場合は、次の使用可能なメソッドで文字列をフォーマットできます。

name = "python"

print ("i code with %s" %name)          # with help of older method
print ("i code with {0}".format(name))  # with help of format
print (f"i code with {name}")           # with help of f-strings
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.