理解 Python 中的 repr() 函数

2024-12-12 08:41:00
admin
原创
67
摘要:问题描述:repr():对象的可评估字符串表示形式(可以对其进行“eval()”,这意味着它是一个可评估为 Python 对象的字符串表示形式)换句话说:>>> x = 'foo' >>> repr(x) "'foo'" 问题:为什么我这样做时会出现双引...

问题描述:

repr():对象的可评估字符串表示形式(可以对其进行“eval()”,这意味着它是一个可评估为 Python 对象的字符串表示形式)

换句话说:

>>> x = 'foo'
>>> repr(x)
"'foo'"

问题:

  1. 为什么我这样做时会出现双引号repr(x)?(我这样做时没有得到它们str(x)

  2. 'foo'为什么我这样做时得到的eval("'foo'")不是对象 x ?


解决方案 1:

>>> x = 'foo'
>>> x
'foo'

因此名称x附加到'foo'字符串。例如,当您调用时,repr(x)解释器会放入'foo'x不是 然后调用repr('foo')

>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"

repr`__repr__实际上调用的魔术方法x,该方法给出包含赋值表示的字符串**。**因此它在字符串中返回。的想法是给出一个包含一系列符号的字符串,我们可以在解释器中输入这些符号并获取与作为 参数发送的相同值。'foo'x'foo'"""'foo'"reprrepr`

>>> eval("'foo'")
'foo'

当我们调用 时eval("'foo'"),就和我们在解释器中输入一样。就像我们直接在解释器中'foo'输入外部字符串的内容一样。""

>>> eval('foo')

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    eval('foo')
  File "<string>", line 1, in <module>
NameError: name 'foo' is not defined

如果我们调用eval('foo'),它和我们在解释器中输入的一样foo。但是没有foo可用的变量,并且会引发异常。

>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>> 

str只是对象的字符串表示形式(记住,x变量指的是'foo'),所以此函数返回字符串。

>>> str(5)
'5'

整数的字符串表示形式5'5'

>>> str('foo')
'foo'

和字符串的字符串表示形式'foo'是相同的字符串'foo'

解决方案 2:

交互式解释器上获得的反馈repr也会使用。当您输入表达式(假设为expr)时,解释器基本上会执行result = expr; if result is not None: print repr(result)。因此,示例中的第二行将字符串格式化foo所需的表示形式('foo')。然后解释器创建该 的repr表示形式,并留下双引号。

为什么当我将 %r 与双引号和单引号转义结合起来并将它们打印出来时,它会按照我在 .py 文件中编写的方式打印出来,而不是按照我希望看到的方式打印出来?

我不确定你在这里问的是什么。文本single ' and double " quotes在运行 时repr包含一种引号的转义符。当然有,否则根据 Python 规则它就不是有效的字符串文字。这正是你通过调用 所要求的repr

还请注意,eval(repr(x)) == x类比不是字面意思。它是一种近似,适用于大多数(所有?)内置类型,但最重要的是,通过查看输出,您可以很好地了解类型和逻辑“值” repr

解决方案 3:

str()用于为最终用户创建输出,repr()用于在开发过程中进行调试。它是对象的官方表示。

例子:

>>> import datetime
>>> today = datetime.datetime.now()
>>> str(today)
'2018-04-08 18:00:15.178404'
>>> repr(today)
'datetime.datetime(2018, 4, 8, 18, 3, 21, 167886)'

从输出中我们看到repr()显示了日期对象的官方表示。

解决方案 4:

1) 的结果repr('foo')字符串 'foo'。在 Python shell 中,表达式的结果也表示为表示形式,因此您本质上看到的是repr(repr('foo'))

2)eval计算表达式的结果。结果始终是一个(例如数字、字符串或对象)。多个变量可以引用同一个值,例如:

x = 'foo'
y = x

x 和 y 现在指的是同一个值。

3) 我不明白你的意思。你能发个例子,说明一下你想看什么吗?

解决方案 5:

当你说

foo = 'bar'
baz(foo)

您没有传递foobaz函数。 foo只是一个用来表示值的名称,在本例中'bar',并且该值被传递给函数baz

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   984  
  在项目管理领域,CDCP(Certified Data Center Professional)认证评审是一个至关重要的环节,它不仅验证了项目团队的专业能力,还直接关系到项目的成功与否。在这一评审过程中,沟通技巧的运用至关重要。有效的沟通不仅能够确保信息的准确传递,还能增强团队协作,提升评审效率。本文将深入探讨CDCP...
华为IPD流程   0  
  IPD(Integrated Product Development,集成产品开发)是一种以客户需求为核心、跨部门协同的产品开发模式,旨在通过高效的资源整合和流程优化,提升产品开发的成功率和市场竞争力。在IPD培训课程中,掌握关键成功因素是确保团队能够有效实施这一模式的核心。以下将从五个关键成功因素展开讨论,帮助企业和...
IPD项目流程图   0  
  华为IPD(Integrated Product Development,集成产品开发)流程是华为公司在其全球化进程中逐步构建和完善的一套高效产品开发管理体系。这一流程不仅帮助华为在技术创新和产品交付上实现了质的飞跃,还为其在全球市场中赢得了显著的竞争优势。IPD的核心在于通过跨部门协作、阶段性评审和市场需求驱动,确保...
华为IPD   0  
  华为作为全球领先的通信技术解决方案提供商,其成功的背后离不开一套成熟的管理体系——集成产品开发(IPD)。IPD不仅是一种产品开发流程,更是一种系统化的管理思想,它通过跨职能团队的协作、阶段评审机制和市场需求驱动的开发模式,帮助华为在全球市场中脱颖而出。从最初的国内市场到如今的全球化布局,华为的IPD体系在多个领域展现...
IPD管理流程   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用