【问题标题】:why %s supports integer and float in python? [duplicate]为什么 %s 在 python 中支持整数和浮点数? [复制]
【发布时间】:2018-09-05 11:28:09
【问题描述】:

在 python 字符串格式中,%s 支持字符串、整数和浮点数

>>> '%s' % 'a'
'a'
>>> '%s' % 1
'1'
>>> '%s' % 1.1
'1.1'

其中 %d 只接受和格式化整数,而 %s 只接受 %f

>>> '%d' % 1
'1'
>>> '%d' % 'a'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str

为什么 %s 单独接受所有三个甚至更多

【问题讨论】:

  • %s 代表一个字符串。由于字符串可以是其中任何一个,因此这是可能的。而对于一个 %d 来说,由于一个字符串值总是可以被当作一个整数,所以这是不可能的。
  • 作为提示,较新的python使用新的字符串格式"{} {}".format('hello', 3)

标签: python python-3.x python-2.7


【解决方案1】:

%s 明确将输入转换为字符串%s%r%a 是仅有的三个转换值的占位符。来自printf-style formatting documentation

's'
字符串(使用 str() 转换任何 Python 对象)。

所以%s 支持任何对象,因为所有Python 对象都支持str() 转换。 %d 不做任何转换。

其他占位符仅支持特定类型。您可能想改用new string formatting syntax(通过str.format()f-strings),其中转换和格式化类型已分开。可以添加 !s!r!a 以在格式化之前先转换值,从而保持语法的独特性和更清晰的转换发生。

您仍然不能将d 格式应用于字符串,当然,如果您想使用d 字段格式,则必须手动将非整数输入值显式转换为整数。

%s!s 字符串转换对于没有显式格式支持的类型很有用。它允许您接受 任何 类型的对象,并且仍然在模板字符串中为其提供一些格式,即使只是为了限制字段宽度或设置文本对齐方式。并且只有字符串转换是普遍支持的,例如你不能将任意对象转换为整数或浮点数。

【讨论】:

    猜你喜欢
    • 2018-04-02
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 2014-06-19
    相关资源
    最近更新 更多