我不明白 %s
和 %d
的作用以及它们的工作原理。
它们用于格式化字符串。 %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))
%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
将打印为浮点数,%g
用于通用数字
明显地
print('%d' % (name))
会产生异常;您不能将字符串转换为数字
%s
用于数字会发生什么。
%s
用作要注入格式化字符串的字符串值的占位符。
%d
用作数字或十进制值的占位符。
例如(对于 python 3)
print ('%s is %d years old' % ('Joe', 42))
会输出
Joe is 42 years old
这些都是信息丰富的答案,但没有一个能够完全理解 %s
和 %d
之间的区别的核心。
%s
告诉格式化程序在参数上调用 str()
函数,并且由于我们根据定义强制转换为字符串,%s
本质上只是执行 str(arg)
。
另一方面,%d
在调用 str()
之前对参数调用 int()
,如 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'
这些是占位符:
例如:'Hi %s I have %d donuts' %('Alice', 42)
这行代码将用 Alice (str) 替换 %s,用 42 替换 %d。
输出:'Hi Alice I have 42 donuts'
大多数情况下,这可以通过“+”来实现。为了更深入地了解您的问题,您可能还需要检查 {} / .format()。这是一个示例:Python string formatting: % vs. .format
还可以在这里看到一个 google python 教程视频@ 40',它有一些解释https://www.youtube.com/watch?v=tKTZoB2Vjuk
%d
和 %s
字符串格式化“命令”用于格式化字符串。 %d
用于数字,%s
用于字符串。
例如:
print("%s" % "hi")
和
print("%d" % 34.6)
传递多个参数:
print("%s %s %s%d" % ("hi", "there", "user", 123456))
将返回 hi there user123456
%d
不是任何数字。它是一个十进制数(又名整数)。在上面的示例中,%d' %34.6
将简单地输出 34
。同样适用于 logger.info("value %d", 34.6)
%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 个问题的答案。
根据最新的标准,这就是应该的方式。
print("My name is {!s} and my number is{:d}".format("Agnel Vishal",100))
请检查 python3.6 docs 和 sample program
%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
这是演示 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。
两者打印相同。
如果您想避免 %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
%s
和 %d
的使用。
print
是 Python 3 中的函数,而不是语句。
说到这...
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
%s
如何与搜索引擎配置一起使用。 Chrome 使用%s
替换在地址栏中输入的关键字。 Python 以类似的方式使用%s
。在print('description: %s' % descrip)
中,%s
运算符将替换为存储在descrip
变量中的文本字符串。圆括号可防止 Python 3 中出现错误消息。