python3编程基础:str()、repr()的区别

python3编程基础:str()、repr()的区别前言 python 中转换成字符有两种方法 str 和 repr 这两种又有什么区别 什么时候用 str 什么时候用 repr str 函数 将值转化为适于人阅读的字符串的形式 repr 函数 将值转化为供解释器读取的字符串形式代码示例下面我们用例子来说明两个函数是差异点 还有就是 print 输出字符串时需要注意的点将整型转换为字符串 gt gt gt a 123

前言

代码示例

下面我们用例子来说明两个函数是差异点,还有就是print输出字符串时需要注意的点

将整型转换为字符串

>>> a = 123 #int类型 >>> type(a) 
  
    >>> str(a) '123' >>> type(str(a)) 
   
     >>> print(str(a)) #print输出时会去掉引号,但是仍然是str类型 123 >>> repr(a) '123' >>> type(repr(a)) 
    
      >>> print(repr(a)) 123 >>> len(repr(a)) #转换后的数据都是'123',所以长度是3 3 >>> len(str(a)) #转换后的数据都是'123',所以长度是3 3 
     
    
  

将字符串再转换为字符串

>>> repr('abd') #repr转换后是在'abd'的外层又加了一层引号 "'abd'" >>> str('abd') #str转换后还是原来的值 'abd' >>> str('abd') == 'abd' True >>> repr('abd') == 'abd' False >>> len(repr('abd')) #repr转换后的字符串和str转换后的字符串个数都是不一样的 5 >>> len(str('abd')) 3 

命令行下print和直接输出的对比

每个类都有默认的__repr__, __str__方法,在命令行下用print 实例时调用的是类的str方法,直接调用的是类的repr方法;在文件模式下没有print的话是不会有输出值的,自己定义一个类A,验证以上结论:

>>> class A(): ... def __repr__(self): ... return 'repr' ... def __str__(self): ... return 'str' ... >>> a = A() >>> a #直接输出调用的是repr方法 repr >>> print(a) #print调用的是str方法 str

repr的使用场景

根据以上代码示例,可以得出只有当repr再次作用在字符串上时会多一层引号,那么这一特性在拼接完字符串用eval执行时是特别有用的,如果不用repr而是采用str会报错,举例,将字符串s = ‘abdcf’转换成列表,如果用eval自己实现的话可以这样写:

>>> s = 'abdcf' >>> eval('['+','.join([repr(i) for i in s])+']') ['a', 'b', 'd', 'c', 'f'] >>> eval('['+','.join([str(i) for i in s])+']') #str报错 Traceback (most recent call last): File " 
  
    ", line 1, in 
   
     File " 
    
      ", line 1, in 
     
       NameError: name 'b' is not defined 
      
     
    
  

为什么会报错呢?当’,’.join([str(i) for i in s])拼接后的结果‘a,b,d,c,f’只有一层引号,eval执行时会去掉这层引号,就成了a,b,d,c,f,解释器就会当做变量对待,但是并没有定义这样的变量,所以报NameError错误

>>> ','.join([repr(i) for i in s]) "'a','b','d','c','f'" >>> ','.join([str(i) for i in s]) 'a,b,d,c,f' >>>

总结

1.除了字符串类型外,使用str还是repr转换没有什么区别,字符串类型的话,外层会多一对引号,这一特性有时候在eval操作时特别有用;

2.命令行下直接输出对象调用的是对象的repr方法,print输出调用的是str方法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225587.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午8:58
下一篇 2026年3月17日 上午8:59


相关推荐

  • sql server 连接查询_连表查询语句

    sql server 连接查询_连表查询语句SQL的连表查询2017年08月31日15:58:49阅读数:176SQL的连表查询连接查询包括合并、内连接、外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要。只有真正了解它们之间的区别,才能正确使用。1、UnionUNION操作符用于合并两个或多个SELECT语句的结果集。UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派…

    2025年11月15日
    5
  • rapidxml学习

    rapidxml学习参考:官网http://rapidxml.sourceforge.net/https://blog.csdn.net/wqvbjhc/article/details/7662931http://blog.sina.com.cn/s/blog_9b0604b40101o6fm.htmlrapidxml_print.hpp修改代码:#ifndefRAPIDXML_PRINT_HP…

    2022年7月17日
    17
  • Oracle PL/SQL编程之八: 把触发器说透

    Oracle PL/SQL编程之八: 把触发器说透Oracle PL/SQL编程之八:把触发器说透  本篇主要内容如下:8.1 触发器类型8.1.1 DML触发器8.1.2 替代触发器8.1.3 系统触发器8.2 创建触发器8.2.1 触发器触发次序8.2.2 创建DML触发器8.2.3 创建替代(INSTEAD OF)触发器8.2.3 创建系统事件触发器8.2.4 系统触发器事件属性8.2.5

    2022年6月17日
    25
  • CodeBlocks控制台中文乱码

    CodeBlocks控制台中文乱码中文乱码是个老问题了,涉及乱码的问题无非是编码不统一造成的;涉及编码的地方常见有:1.源文件本身编码2.编译器读取源文件编码3.数据编码(数据库,IO文件等)4.执行输出编码 知道乱码的原因有利于解决乱码问题,这些原因在哪个IDE都是通用的 关于codeblock这款IDE,这里…

    2022年7月26日
    15
  • 透彻掌握Spring整合MyBatis的原理彻底征服面试官,建议收藏

    透彻掌握Spring整合MyBatis的原理彻底征服面试官,建议收藏  在MyBatis篇内容的最后我们来给大家详细介绍下Spring是如何整合MyBatis的。让大家彻底掌握MyBatis的底层设计原理及实现。MyBatis整合Spring原理  把MyBatis集成到Spring里面,是为了进一步简化MyBatis的使用,所以只是对MyBatis做了一些封装,并没有替换MyBatis的核心对象。也就是说:MyBatisjar包中的SqlSessionFactory、SqlSession、MapperProxy这些类都会用到。mybatis-spring.jar里

    2022年5月30日
    40
  • 【webservice】Java JAX-WS和JAX-RS webservice「建议收藏」

    【webservice】Java JAX-WS和JAX-RS webservice「建议收藏」一、webservice请求的工作原理:客户端——>阅读WSDL文档(根据文档生成SOAP请求)——>发送到Web服务器——>交给WebService请求处理器——>处理SOAP请求——>调用WebService——>生成SOAP应答——>Web服务器通过http的方式交给客户端详细描述如下:无论使用什么工具/语言编写的webser…

    2022年7月25日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号