repr() Vs str()
在python中,将对象转换为字符串有两个内建函数: str Vs repr .
str 是一个友好的,人们可读的字符串。repr 应该包含关于对象内容的详细信息(有时他们会返回相同的内容,例如整数)。
按照惯例。如果有一个python表达式将评估另一个 == 对象,repr 将会返回这样的表达式,
>>> print(repr("hi"))
"hi" # notice the quotes here as opposed to ...
>>> print(str("hi"))
hi
If returning an expression doesn't make sense for an object, repr should return a sting
that's surround by <and> symbols e.g. <blsh>
To answer your original question:
%s <-> str
%r <-> repr
in addition:
You can control the way an instance of your own classes convert to string by implemrnting
__str__ and __repr__ methods.
class Foo:
def __init__(self, foo):
self.foo = foo
def __eq__(self, other):
""" Implements == ."""
return self.foo = other.foo
def __repr__(self):
#if you eval the return value of this function,
#you'll get another Foo instance that's == to self
return "Foo(%r)" % self.foo
Adding to the replies given above, '%r' can be useful in a scensrio where you have
a list with heterogeous data .Let's say ,we have a
List = [1,'apple', 2, 'r', 'banana'] Obviously in this case using
'%d' or '%s' would cause an error .instead, we can use '%r' to
print all these value.
Python 有办法将任意值转为字符串:将它传入repr() 或str() 函数。
函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式(如果没有等价的
语法,则会发生SyntaxError 异常) 某对象没有适于人阅读的解释形式的话, str() 会返回与repr()
等同的值.
__repr__和__str__这两个方法都是用于显示的,__str__是面向用户的,而__repr__面向程序员。
打印操作会首先尝试__str__和str内置函数(print运行的内部等价形式),它通常应该返回一个友好的显示。
__repr__用于所有其他的环境中:用于交互模式下提示回应以及repr函数,如果没有使用__str__,会使用print和str。它通常应该返回一个编码字符串,可以用来重新创建对象,或者给开发者详细的显示。
当我们想所有环境下都统一显示的话,可以重构__repr__方法;当我们想在不同环境下支持不同的显示,例如终端用户显示使用__str__,而程序员在开发期间则使用底层的__repr__来显示,实际上__str__只是覆盖了__repr__以得到更友好的用户显示。
尽管str(),repr()和``运算在特性和功能方面都非常相似,事实上repr()和``做的是完全一样的事情,它们返回的是一个对象的“官方”字符串表示,也就是说绝大多数情况下可以通过求值运算(使用内建函数eval())重新得到该对象,但str()则有所不同。str()致力于生成一个对象的可读性好的字符串表示,它的返回结果通常无法用于eval()求值,但很适合用于print语句输出。需要再次提醒的是,并不是所有repr()返回的字符串都能够用 eval()内建函数得到原来的对象。
也就是说 repr() 输出对 Python比较友好,而str()的输出对用户比较友好。虽然如此,很多情况下这三者的输出仍然都是完全一样的。
最新文章
- Android开机启动程序
- 六款最佳Linux教育应用
- (转载)c库不正确问题
- [vim]插件ctrlp
- IPython与notebook 安装
- C#之序列化对象(二进制方式序列化对象)
- python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
- vue-15-vuex-store的用法
- SQL Server 锁实验(重建索引)
- 浅谈jQuery的promise
- spring boot 跨域请求
- hdu 1151 Air Raid 最小路径覆盖
- Office2013中文激活版
- Xcode8如何创建Framework静态SDK库
- 【CF248E】Piglet&#39;s Birthday(动态规划)
- Eloquent 条件查询——tucker-eric/eloquentfilter 笔记
- Objective-C:NSValue类的常见用法
- eclipse中maven项目部署到tomcat [转]
- WebLogic11g-创建域(Domain)及基本配置
- OpenJudge百炼习题解答(C++)--题4074:积水量
热门文章
- 封装 jsonp请求数据的方法
- 学习笔记-Unity3d代码实现Windows10加载圈圈的效果
- 实验吧CTF练习题---WEB---Forms解析
- .net core 自定义404 500页面
- Winform中使用ZedGraph实现曲线图中字体去掉边框
- 手把手教程: CentOS 6.5 LVS + KeepAlived 搭建 负载均衡 高可用 集群
- HBase 超详细介绍
- Python连载38-协程、可迭代、迭代器、生产者消费者模型
- 迥异和诡异的SendMessage和PostMessage
- Python中的MRO(方法解析顺序)[转载]