Python中的字符串格式:我可以对所有类型使用%s吗?

Ric*_*son 7 python string floating-point integer string-formatting

在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
Run Code Online (Sandbox Code Playgroud)

我不知道其他变量类型,但这样使用是否安全%s

它肯定比每次总是指定类型更快.

mgi*_*son 14

使用%s自动调用str变量.由于一切都已__str__定义,您应该能够毫无问题地执行此操作(即不会引发异常).但是,你真正打印的是另一个故事......

请注意,在较新的python代码中,还有另一个使用该format方法的选项:

'Integer: {}; Float: {}; String: {}'.format(a,b,c)
Run Code Online (Sandbox Code Playgroud)

这基本上以相同的方式工作,除了它在学习语法后更强大.

  • @RickyRobinson - 你可以在python中做很多事情 - 我不应该告诉你使用它的原因;-).关键是如果使用正确的'%...'选项,您将获得对输出的更多控制.如果您不知道类型,可以使用`%`,只是不要指望输出以精确的方式格式化(例如3个空格后跟8个字符宽的数字,然后是3个空格后的浮点数)小数点......) (2认同)

Mar*_*ers 5

是的,这正是%s 意味着什么; 将参数转换为字符串并插入它.

您还可以指定其他形式的转换,如%d%f对值转换为不同类型的表示.有关详细信息,请参阅字符串格式化操作

作为替代方案,从Python 2.6及更高版本开始,您还可以使用以下.format()方法使用不同形式的字符串格式:

print 'Integer: {0}; Float: {1}; String: {2}'.format(a, b, c)
Run Code Online (Sandbox Code Playgroud)

该方法提供了一些额外的功能,例如引用对象的属性,映射中的键或列表中的索引来引用值.