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的Flask框架的简介和安装方法
Nov 13 Python
python简单线程和协程学习心得(分享)
Jun 14 Python
详解python实现交叉验证法与留出法
Jul 11 Python
django的聚合函数和aggregate、annotate方法使用详解
Jul 23 Python
pytorch 数据处理:定义自己的数据集合实例
Dec 31 Python
Python猴子补丁知识点总结
Jan 05 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
Mar 10 Python
基于Django signals 信号作用及用法详解
Mar 28 Python
windows python3安装Jupyter Notebooks教程
Apr 13 Python
Django ORM 查询表中某列字段值的方法
Apr 30 Python
Keras:Unet网络实现多类语义分割方式
Jun 11 Python
Python 视频画质增强
Apr 28 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
建站常用13种PHP开源CMS比较
2009/08/23 PHP
关于php中的json_encode()和json_decode()函数的一些说明
2016/11/20 PHP
YII框架http缓存操作示例
2019/04/29 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
JSON 和 JavaScript eval使用说明
2010/06/13 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
bootstrap布局中input输入框右侧图标点击功能
2016/05/16 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
BootStrap daterangepicker 双日历控件
2017/06/02 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
Python写的Socks5协议代理服务器
2014/08/06 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
python实现简单加密解密机制
2019/03/19 Python
解决Django no such table: django_session的问题
2020/04/07 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
2021/01/28 Python
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
计算机专业推荐信范文
2013/11/20 职场文书
产品质量保证书范本
2015/02/27 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python
利用Java连接Hadoop进行编程
2022/06/28 Java/Android
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技