【问题标题】:Why in Python 3, repr(repr(obj)) is repr(obj) wrapped in double quotes when obj is a non-empty mapping proxy? [duplicate]为什么在 Python 3 中,当 obj 是非空映射代理时,repr(repr(obj)) 是用双引号包裹的 repr(obj)? [复制]
【发布时间】:2019-09-18 11:58:23
【问题描述】:

在 Python 3 中,大多数时候,repr(repr(obj)) 的结果将是用单引号括起来的 repr(obj)。但是当 obj 是一个非空映射代理时 repr(repr(obj)) 被双引号括起来。为什么?

这是在 Wing IDE 101 上运行 Python 3.7 的 Windows 10 服务器。

mappingproxy = type(object.__dict__)
#Single quotes for undefined mapping proxies
print(repr("mappingproxy({})"))

'mappingproxy({})'
#Double quotes for defined mapping proxies
print(repr(repr(object.__dict__)))
<<< "mappingproxy({...})"
#For custom empty mapping proxies...
print(repr(repr(mappingproxy({}))))
<<< 'mappingproxy({})'
#...single, at least for ones evaluating to False
#For mapping proxies evaluating to True...
print(repr(repr(mappingproxy({'a':1, 'b':2}))))
<<< "mappingproxy({'a': 1, 'b': 2})"
#...double
#For non-existant non-empty ones...
print(repr("mappingproxy({'a':1})"))
<<< "mappingproxy({'a':1})"
#...double
#Why is that?

打印语句的结果以"&lt;&lt;&lt;" 开头。 顺便说一句,我想我可以推导出一个空的映射代理表示,其表示用单引号括起来。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    Python 的字符串 repr 默认为单引号,但如果它包含任何单引号,则会切换为双引号,因此不必使用反斜杠将其转义。 (否则第一个内部单引号将结束字符串。)

    但如果它同时包含双引号和单引号,它将使用默认的单引号并在内部用反斜杠转义它们。

    请注意,您的 mappingproxy repr 示例包含单引号字符串,空字符串除外。那是内部单引号。

    【讨论】:

      猜你喜欢
      • 2020-01-18
      • 2010-12-13
      • 2021-05-19
      • 2015-02-08
      • 2021-12-21
      • 2014-03-06
      • 2020-02-16
      • 2020-03-28
      相关资源
      最近更新 更多