当前位置: 首页 > 知识库问答 >
问题:

f字符串表示形式不同于str()

关正雅
2023-03-14

我一直认为f-strings调用了\uu str\uuu方法。也就是说,f{x}始终与str(x)相同。然而,对于这个类

class Thing(enum.IntEnum):
    A = 0

f{Thing.A}'0',而str(Thing.A)'Thing。一个“”。如果我使用enum,这个例子就不起作用了。枚举作为基类。

f字符串调用哪些功能?

共有3个答案

周和歌
2023-03-14

“f”字符串的用法如下:(在操作系统中也是如此)

number = 41
print(f'Your number is {number}!')

这将导致:

你的号码是41!

如果没有f字符串,代码将打印:

你的号码是{number}!

str()函数将值转换为字符串形式,以便它们也可以与其他字符串组合。

您也可以在{}中放置其他内容。

我希望这能有所帮助。

孔琪
2023-03-14

Python中的f字符串不使用\uu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。它们使用<代码>\uuu格式\uuu 。因此,要获得与{Thing.A}相同的结果,需要调用format(Thing.A)。

<代码>\uuu格式\uuu(…) 方法允许您添加更多格式特性(例如,使用浮点数,您可以将数字四舍五入到两位小数)。

如果没有为类/对象定义form(),python将回退到__str__。这就是为什么大多数人认为str()是f字符串中使用的方法。

这些文档详细介绍了您使用的选项:链接到文档

夏长卿
2023-03-14

来自Python参考中的“格式化字符串文字”:f字符串调用“格式协议”,与格式内置函数相同。这意味着调用__format__魔术方法而不是__str__

class Foo:
    def __repr__(self):
        return "Foo()"

    def __str__(self):
        return "A wild Foo"
    
    def __format__(self, format_spec):
        if not format_spec:
            return "A formatted Foo"
        return f"A formatted Foo, but also {format_spec}!"

>>> foo = Foo()
>>> repr(foo)
'Foo()'
>>> str(foo)
'A wild Foo'
>>> format(foo)
'A formatted Foo'
>>> f"{foo}"
'A formatted Foo'
>>> format(foo, "Bar")
'A formatted Foo, but also Bar!'
>>> f"{foo:Bar}"
'A formatted Foo, but also Bar!'

如果不想调用__format__,可以在表达式后指定! s(用于str)或! r(用于repr):

>>> foo = Foo()
>>> f"{foo}"
'A formatted Foo'
>>> f"{foo!s}"
'A wild Foo'
>>> f"{foo!r}"
'Foo()'

这对字符串偶尔有用:

>>> key = 'something\n nasty!'
>>> error_message = f"Key not found: {key!r}"
>>> error_message
"Key not found: 'something\\n nasty!'"
 类似资料:
  • 本文向大家介绍JavaScript 数字的字符串表示形式,包括了JavaScript 数字的字符串表示形式的使用技巧和注意事项,需要的朋友参考一下 示例 JavaScript具有从Number到String表示形式的本地转换,从2到36的任何基数。 十进制(以10为底)之后最常见的表示形式是十六进制(以16为底),但本节的内容适用于范围内的所有底。 为了将数字从十进制(以10为底)转换为十六进制(

  • 我遇到了一个奇怪的错误,我正在努力理解。做一些常规代码清理并将所有字符串格式转换为f字符串。这是在Python 3.6.6上 此代码不起作用: 但是,这(功能相同)确实有效: 我觉得我可能错过了一些明显的东西,并且对第二次迭代很好,但是我想了解这里发生了什么。

  • 问题内容: 我有一个C python扩展名,我想打印一些诊断信息。 我收到一个字符串作为PyObject *。 获取此对象的字符串表示形式(使其可用作const char *)的规范方法是什么? 更新: 澄清以强调访问为const char *。 问题答案: 使用(模仿Python的函数)或(模仿),然后调用get (您可以并且通常应该将其用作,例如: 任何人都可以使用此方法。如果您完全确定是Py

  • 问题内容: 为什么当我使用以下操作对字符求和时,它返回数字而不是字符?它不应该给出相同的结果吗? 下面的代码复制了字符: doubleChar(“ The”)→“ TThhee” 问题答案: 以下表达式的结果 是String连接的结果。Java语言规范说明 字符串串联的结果是对String对象的引用,该对象是两个操作数字符串的串联。在新创建的字符串中,左侧操作数的字符位于右侧操作数的字符之前。 的

  • 问题内容: 假设我定义了以下类型: 我将如何以编程方式将类型作为字符串获取,因此以后可能很容易重构,而不是: 我不太喜欢,因为它实例化了它,也可以从Interface实例化。 问题答案: 您可以使用包装(包装也可以在内部使用)。您可以从 指向 该类型的 指针 开始,并使用没有分配的 类型化_指针值,并且可以使用来从其描述符导航到指针的 _基本 类型(或 元素 类型)的描述符。 例: 输出(在Go

  • 问题内容: 在Java中,我可以覆盖类的方法。然后,Java的print函数将打印由其定义的对象的字符串表示形式。是否有与Java等效的Python ? 例如,我有一个PlayCard类。我有一个PlayCard实例c。现在: 但是我想要的是这样的: 如何自定义类实例的字符串表示形式? 我正在使用Python 3.x 问题答案: 与Java最接近的等效项是为您的类实现。将其放在您的类定义中: 您可