获取对象的字符串表示形式 repr( ) , str( )

交互式控制台和调试器(个人理解:debug)在表达式求值结果上调用repr函数,处理方式与使用%运算符处理经典格式化方式中的%r 占位符,以及使用str.format方法处理新字符串格式化句法中的 !r 转换字段一样。(简单点,就是repr函数与 %r占位符,!r 转换字段的处理方式一样。)

__repr__方法中的f字符串使用 !r 以标准的表示形式显示属性。( !r 用来做debug比较好,因为它会显示变量的原始数据,而其他的符号则是用来向用户显示输出的。)

 

 

 

每门面向对象的语言至少都有一种获取对象的字符串表示形式的标准方式。Python提供了两种方式。

repr( )函数的实现,是依赖__repr__特殊方法,以便于开发者理解的方式返回对象的字符串表示形式。

str( )函数的实现,是依赖__str__特殊方法,以便于用户理解的方式返回对象的字符串表示形式。

正如你所知,我们要实现__repr__和__str__特殊方法,为repr( )和str( )提供支持。

如果Vector实例的分量超过6个,repr( )生成的字符串就会使用...省略一部分。

包含大量元素的集合类型一定要这么做,因为字符串表示形式是用于调试的(因此不想让大型对象在控制台或日志中输出几千行内容)。

使用reprlib模块可以生成长度有限的表示形式,reprlib模块的名字是repr.

  为了给对象提供其他的表示形式,还会用到另外两个特殊方法:__bytes__和__format__。

__bytes__方法与__str__方法类似:bytes( )函数调用它获取对象的字节序列表示形式。

而__format__方法会被内置的format( )函数和str.format( )方法调用,使用特殊的格式代码显示对象的字符串表示形式。

注:如果你是从Python 2转过来的,记住,在Python 3中,__repr__、__str__和__format__都必须返回Unicode字符串(str类型)。只有__bytes__方法应该返回字节序列(bytes类型)。

 

reprlib.repr这个函数用于生成大型数据结构的简略字符串表示形式。默认情况下,reprlib.repr函数生成的字符串最多有30个字符。

str() , __str__

repr() , __repr__

 

 

 

直接一个变量名,会调用repr( )函数。而用print()函数打印变量,会调用str函数。

意识到应该区分字符串表示形式的早期语言是Smalltalk。1996年,Bobby Woolf写了一篇题为“How to Display an Object as a String: printString and displayString”的文章,他在这篇文章中讨论了Smalltalk对printString和displayString方法的实现。在9.1节说明repr( )和str( )的作用时,我从这篇文章中借用了言简意赅的表述,即“便于开发者理解的方式”和“便于用户理解的方式”。

 

 

reprlib模块,官网:reprlib --- 另一种 repr() 实现 — Python 3.11.3 文档

https://docs.python.org/zh-cn/3/library/reprlib.html

 

 

 

posted @   limalove  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2020-04-25 pandas处理缺失值df.dropna( )的thresh参数
点击右上角即可分享
微信分享提示