Python字符串格式化中%s和%d之间的区别是什么?

时间:2010-11-26 22:35:16

标签: python string-formatting

我不明白%s%d做了什么以及它们如何运作。

13 个答案:

答案 0 :(得分:151)

它们用于格式化字符串。 %s作为字符串的占位符,%d充当数字的占位符。它们的关联值使用%运算符通过元组传递。

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

将打印marcog 42。请注意,name是一个字符串(%s),number是一个整数(%d表示十进制)。

有关详细信息,请参阅https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting

在Python 3中,例子是:

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

答案 1 :(得分:25)

%s用作占位符,表示要注入格式化字符串的字符串值。

%d用作数字或小数值的占位符。

例如(对于python 3)

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

输出

Joe is 42 years old

答案 2 :(得分:17)

来自python 3 doc

%d用于十进制整数

%s用于通用字符串或对象,如果是对象,则将其转换为字符串

考虑以下代码

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

输出将是

  

giacomo 4.3 4 4.300000 4.3

正如您所看到的,%d将截断为整数,%s将保持格式,%f将打印为float,%g用于通用数字

明显

print('%d' % (name))

会产生异常;你不能将字符串转换为数字

答案 3 :(得分:11)

这些是占位符:

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

这行代码将%s替换为Alice(str),%d替换为42。

输出:'Hi Alice I have 42 donuts'

这可以用" +"来实现。大多数时候。为了更深入地理解您的问题,您可能还需要检查{} / .format()。以下是一个示例:Python string formatting: % vs. .format

另见这里的谷歌python教程视频@ 40',它有一些解释 https://www.youtube.com/watch?v=tKTZoB2Vjuk

答案 4 :(得分:9)

%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适用于数字或十进制变量。

如果您打印variable_3,它将会是这样的

print(variable_3 % (variable_one, variable_two))

我在StackOverflow中搜索答案,发现我的问题超过45个答案。

答案 5 :(得分:9)

%d%s字符串格式化"命令"用于格式化字符串。 %d用于数字,%s用于字符串。

举个例子:

print("%s" % "hi")

print("%d" % 34.6)

传递多个参数:

print("%s %s %s%d" % ("hi", "there", "user", 123456))将返回hi there user123456

答案 6 :(得分:7)

它们是格式说明符。当您希望将Python表达式的值包含在字符串中时,可以使用它们,并强制执行特定格式。

请参阅Dive into Python以获得相对详细的介绍。

答案 7 :(得分: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

答案 8 :(得分:2)

%s用于容纳字符串的空间 %d用于保留数字的空间

{ "$group" : { "_id" : null, "averageValues" : { "$avg" : "$value"}}

Program output

该视频深入介绍了https://www.youtube.com/watch?v=4zN5YsuiqMA提示

答案 9 :(得分: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

答案 10 :(得分:1)

这是演示Python字符串格式的基本示例以及一种新的实现方法。

my_word = 'epic'
my_number = 1

print('The %s number is %d.' % (my_word, my_number))  # traditional substitution with % operator

//史诗编号是1。

print(f'The {my_word} number is {my_number}.')  # newer format string style

//史诗编号是1。

两者都打印相同。

答案 11 :(得分:0)

根据最新标准,这是应该做的事情。

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

请检查python3.6 docssample program

答案 12 :(得分:0)

这些都是提供信息的答案,但没有一个完全触及%s%d之间的区别的核心。 %s告诉格式化程序在参数上调用str()函数。由于根据定义我们强制使用字符串,因此这是string.format的默认设置。 %d在调用int()之前先在参数上调用str(),就像str(int(arg))一样,这将导致int以及str的强制。例如,我可以将十六进制值转换为十进制,或截断浮点数。

>>> '%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就足够了,但是如果您需要额外的格式设置(如格式化浮点小数位)或其他强制性格式,则需要其他格式符号。