web-dev-qa-db-ja.com

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

私は%s%dが何をするのか、そしてそれらがどのように働くのか理解していません。

102
karlzt

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

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

marcog 42を表示します。 nameは文字列(%s)、numberは整数(10進数の場合は%d)です。

詳しくは https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting をご覧ください。

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

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

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

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

例えば(python 3の場合)

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

出力しますか

Joe is 42 years old
25
Soviut

python 3 docから

%dは10進整数用です

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

次のコードを見てください

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はfloatとして出力され、%gは総称として使用されます

明らかに

print('%d' % (name))

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

18
venergiac

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

例えば、次のとおりです。'Hi %s I have %d donuts' %('Alice', 42)

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

出力:'Hi Alice I have 42 donuts'

これはほとんどの場合「+」で実現できます。あなたの質問をより深く理解するためには、{}/.format()もチェックした方が良いでしょう。その一例を示します。 Python文字列フォーマット:%vs. .format

また、ここでグーグルpythonチュートリアルビデオ@ 40 'を参照してください、それはいくつかの説明があります https://www.youtube.com/watch?v=tKTZoB2Vjuk

11
kevin

%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はStringに対して機能し、%dは数値または10進数変数に対して機能することに注意してください。

variable_3を印刷すると、このようになります。

print(variable_3 % (variable_one, variable_two))

私はStackOverflowで答えを探していて、私の質問に対して45以上の答えを見つけました。

9
Leo

%dおよび%s文字列フォーマット "コマンド"は、文字列をフォーマットするために使用されます。 %dは数字用で、%sは文字列用です。

例を挙げましょう。

print("%s" % "hi")

そして

print("%d" % 34.6)

複数の引数を渡すには:

print("%s %s %s%d" % ("hi", "there", "user", 123456))hi there user123456を返します

9
Stiffy2000

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

比較的詳細な紹介については、 Pythonに飛び込む を参照してください。

7
Lucas Jones

その場合は、%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
Sujatha

それについて言えば….
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
1
a_m_dev

最新の標準に従って、これはそれが行われるべき方法です。

print("My name is {!s} and my number is{:d}".format("Agnel Vishal",100))

python3.6 docs および サンプルプログラム を確認してください

1
Agnel Vishal

これらはすべて有益な答えですが、%s%dの違いが何であるかという根本的な原因になっているものはありません。

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

一方%dは、int()を呼び出す前に、str()を呼び出す前に、引数でstr(int(arg))を呼び出しています。これは、int強制およびstr強制を引き起こします。

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

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

またはfloatを切り捨てます。

>>> '%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 = 'some_string'
>>> f'{a:s}'
'some_string'
>>> a = 'some_string'
>>> f'{a}'
'some_string'

string.formatについても同じことが言えます。デフォルトはstrです。

>>> '{}'.format(a)
'some_string'
>>> '{!s}'.format(a)
'some_string'
0
Wyrmwood