Python字符串格式中的%s和%d有什么区别?


Answers:


185

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

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

将打印marcog 42。请注意,名称是字符串(%s),数字是整数(%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方式与此类似。在print('description: %s' % descrip)%s运营商将被存储在文本字符串替换descrip变量。
圆括号

您如何称呼这些%s,%d等?
Chaine

1
@Chaine它们被称为占位符,它们是可替换的变量
Leo

@Leo谢谢!
Chaine

37

python 3 doc

%d 用于十进制整数

%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将打印为float并%g用于通用编号

明显

print('%d' % (name))

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


这需要更多支持。它解释了如果%s使用数字代替将会发生什么。
维卡斯·普拉萨德

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的用途。
苏联

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字符串格式:%vs.format

在这里也可以看到@ 40'的Google python教程视频,其中有一些说明 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

%s告诉格式化程序str()在参数上调用该函数,并且由于我们按照定义强制使用字符串,%s因此实际上只是在执行str(arg)

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

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

如果您打印variable_3它看起来像这样

print(variable_3 % (variable_one, variable_two))

我在StackOverflow中寻找答案,找到了超过45个答案。




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

感谢您的关注,我会做出一些更改,不客气
Noel Moses Mwadende

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.