python使用str & repr转换字符串


Posted in Python onOctober 13, 2016

可能比较 low 还是记录一下:

str 和 repr的使用过程

  1. str 是一个类型 (int, long 类似), 同样她也可以作为一个工厂方法 实例一个 string
  2. repr 是python 内置的函数, 用于保留一个 打印值在python 代码片段里的真实状态

好,以上全是废话

>>> a = 1
>>> a + ""
---------------------------------------------------------------------------
TypeError
Traceback (most recent call last)
<ipython-input-5-ebf3ab7f3a34> in <module>()
----> 1 a + ""

TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> a = 1
>>> repr(a) + ""

可以看到, 我们可以通过使用 str 和 repr 来转换字符串

但是,str 只能提供一个 元string来做转换, 不可以是一个变量(她不具备执行变量的能力)

repr 是一个函数, 所以实际上是传参, 可以是变量和string

好多人都知道str()能把123数字转成字符串,python里的str()甚至还能把列表、字典等对象转成字符串。这都好理解,可是一旦把str()和repr()放在一起,大家就全都不淡定了-_-!

来看一段代码,仍是在IDLE里交互:

>>> str('hello')
  'hello'
  >>> repr('hello')
  "'hello'"

  >>> str('你好')
  '\xc4\xe3\xba\xc3'
  >>> repr('你好')
  "'\\xc4\\xe3\\xba\\xc3'"

先看前两句:英文的'hello'在str()后仍是'hello',可是在repr()后就变成了"'hello'"。这就说明,str()返回的就是字符串本身,而repr()虽然返回的也是字符串,但它是一个标准字符串,官方解释比较绕,我来解释下吧。repr是representation及描述的意思,不是对人的描述,而是对python机器的描述,也就是它会将某物返回一个它在python中的描述。说人话:repr(obj)告诉我们obj这个变量在背地里是什么样子,在背地里是怎么被python处理被python"玩弄"的。

在python里,我们总会被眼睛欺骗。编辑器里显示的东西,并不总是它原本的面貌。python为了方便,总是表面上一套,背地里又一套。

再来理解后两句:中文的'你好'在str()后变成了编码'\xc4\xe3\xba\xc3',在repr()后变成了"'\xc4\xe3\xba\xc3'"。`都加上了转移符变成\,相当于把字符串中的内容都“标准化”了。至于'变成"`只是为了说明repr()返回的是一个经过处理的新字符串。

print后的str()和repr()

来看代码:

>>> print str('你好')
  你好
  >>> print repr('你好')
  '\xc4\xe3\xba\xc3'

之前str('你好')显示的是'\xc4\xe3\xba\xc3',而一经过print,就变成了正确的'你好'。上面说过了,命令行里直接输入一个变量,显示的是它在python后台存储的数据;而用print出来的东西,会显出出尽量友好、让人能看懂的东西。
理解了这个,对print这两个结果的不同,也就全然理解了。然后也就放弃print作为考据的心了。

Python 相关文章推荐
python字符串的常用操作方法小结
May 21 Python
Flask框架的学习指南之开发环境搭建
Nov 20 Python
用python实现简单EXCEL数据统计的实例
Jan 24 Python
JSONLINT:python的json数据验证库实例解析
Nov 28 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
Request的中断和ErrorHandler实例解析
Feb 12 Python
pytorch构建网络模型的4种方法
Apr 13 Python
PyQt 图解Qt Designer工具的使用方法
Aug 06 Python
keras 多gpu并行运行案例
Jun 10 Python
查看keras的默认backend实现方式
Jun 19 Python
keras的三种模型实现与区别说明
Jul 03 Python
Python list和str互转的实现示例
Nov 16 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 #Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
Oct 12 #Python
shelve  用来持久化任意的Python对象实例代码
Oct 12 #Python
Pyhton中单行和多行注释的使用方法及规范
Oct 11 #Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
Oct 11 #Python
深入浅析ImageMagick命令执行漏洞
Oct 11 #Python
Zabbix实现微信报警功能
Oct 09 #Python
You might like
桌面中心(一)创建数据库
2006/10/09 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
php使用glob函数快速查询指定目录文件的方法
2014/11/15 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
php 静态属性和静态方法区别详解
2017/04/09 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
HR vs CL BO3 第二场 2.13
2021/03/10 DOTA
js 自定义的联动下拉框
2010/02/07 Javascript
js change,propertychange,input事件小议
2011/12/20 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
AngularJS基础 ng-mouseover 指令简单示例
2016/08/02 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
2017/05/27 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
vue 配置多页面应用的示例代码
2018/10/22 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
python实现报表自动化详解
2017/11/16 Python
python获取代理IP的实例分享
2018/05/07 Python
python处理multipart/form-data的请求方法
2018/12/26 Python
python解析多层json操作示例
2019/12/30 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
个人简历自我鉴定
2013/10/11 职场文书
2014年小学元旦活动方案
2014/02/12 职场文书
初中英语演讲稿
2014/04/29 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2015年推普周活动总结
2015/03/27 职场文书
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL