在Python中进行字符串格式化时,我注意到%s
也将数字转换为字符串。
>>> a = 1
>>> b = 1.1
>>> c = 'hello'
>>> print 'Integer: %s; Float: %s; String: %s' % (a, b, c)
Integer: 1; Float: 1.1; String: hello
我不知道其他变量类型,但是使用这样的%s
安全吗?
这肯定比每次都指定类型更快。
使用 %s
自动调用变量上的str
。 由于所有内容都__str__
定义,因此您应该能够毫无问题地执行此操作(即不会提出异常)。 但是,您实际打印的是另一个故事......
请注意,在较新的python代码中,还有另一个使用format
方法的选项:
'Integer: {}; Float: {}; String: {}'.format(a,b,c)
这基本上以相同的方式工作,只是一旦你学习了语法,它就会更强大。
是的,这正是%s
的意思; 将参数转换为字符串并插入它。
还可以指定其他形式的转换,例如%d
和%f
,以将值转换为不同类型的表示形式。有关更多详细信息,请参阅字符串格式设置操作。
作为替代方案,从 Python 2.6 及更高版本开始,您还可以使用 .format()
方法使用不同形式的字符串格式:
print 'Integer: {0}; Float: {1}; String: {2}'.format(a, b, c)
该方法提供了一些额外的功能,例如引用对象的属性、映射中的键或列表中的索引以引用值。
另一种选择是使用新的样式字符串格式 - 其行为方式相同。
>>> 'integer: {} float: {} string: {}'.format(1, 1.1, 'blah')
'integer: 1 float: 1.1 string: blah'
但是,这也意味着您可以代替编写str(obj)
>>> format(1)
'1'
>>> format(1.1)
'1.1'
>>> format('blah')
'blah'
然后,您可以为其提供格式选项:
>>> format(12345, '>10,')
' 12,345'
除了 %s 之外,还有其他运算符的原因是要为它们操作的数据类型提供特定的格式设置功能。
使用 %s 时,得到的只是对要插值的值调用 str() 的结果。
因此,使用 %s 意味着您将无法强制值的表示符合您可能想要使用的严格格式,因为您坚持使用 str() 的输出。
使用其他运算符,可以指定值的格式。IE:也许您希望将字符串中的所有浮点数表示为小数点后 2 位,而不管该数字所需的实际小数位数 - 在这种情况下,%s 无法完成这项工作。