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中使用copy模块实现列表(list)拷贝
Apr 14 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
Dec 10 Python
浅析python递归函数和河内塔问题
Apr 18 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
Nov 21 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
python实现连连看辅助(图像识别)
Mar 25 Python
Pandas分组与排序的实现
Jul 23 Python
Django应用程序入口WSGIHandler源码解析
Aug 05 Python
python爬取Ajax动态加载网页过程解析
Sep 05 Python
python socket通信编程实现文件上传代码实例
Dec 14 Python
Python AutoCAD 系统设置的实现方法
Apr 01 Python
Python安装并操作redis实现流程详解
Oct 13 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
Session的工作机制详解和安全性问题(PHP实例讲解)
2014/04/10 PHP
php中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
php7下的filesize函数
2019/09/30 PHP
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
jQuery实现单击按钮遮罩弹出对话框(仿天猫的删除对话框)
2014/04/10 Javascript
DOM 高级编程
2015/05/06 Javascript
jquery实现鼠标悬浮停止轮播特效
2020/08/20 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
几种经典排序算法的JS实现方法
2016/03/25 Javascript
JavaScript中的原型继承基础学习教程
2016/05/06 Javascript
JavaScript实现前端分页控件
2017/04/19 Javascript
对layui中表单元素的使用详解
2018/08/15 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
Python的字典和列表的使用中一些需要注意的地方
2015/04/24 Python
Python抽象类的新写法
2015/06/18 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
2017/07/08 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
python获取引用对象的个数方式
2019/12/20 Python
通过Python扫描代码关键字并进行预警的实现方法
2020/05/24 Python
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
Sony C++笔试题
2013/03/10 面试题
自我评价是什么
2014/01/04 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
行政文员岗位职责
2015/02/04 职场文书
党小组考察意见
2015/06/02 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript
Redis如何使用乐观锁(CAS)保证数据一致性
2022/03/25 Redis