Python 类型运算符和类型工厂函数总结

 1.str()和 repr() (及 `` 运算符) 


内建函数 str() 和 repr() 或反引号运算符(``) 可以方便的以字符串的方式获取对象的
内容、类型、数值属性等信息。str()函数得到的字符串可读性好, 而 repr()函数得到的字符串通常可以用来重新获得该对象, 通常情况下 obj == eval(repr(obj)) 这个等式是成立的。这两个函数接受一个对象做为其参数, 返回适当的字符串。在下面的例子里, 我们会随机取一些 Python 对象来查看他们的字符串表示。
 


>>> str(4.53-2j) 
'(4.53-2j)' 
>>> str(1) 
'1' 
>>> str(2e10) 
'20000000000.0'
>>> str([0, 5, 9, 9]) 
'[0, 5, 9, 9]' 
>>> repr([0, 5, 9, 9]) 
'[0, 5, 9, 9]' 
>>> `[0, 5, 9, 9]` 
'[0, 5, 9, 9]' 


尽管 str(),repr()和``运算在特性和功能方面都非常相似, 事实上 repr() 和 `` 做的
是完全一样的事情,它们返回的是一个对象的“官方”字符串表示, 也就是说绝大多数情况下可以通过求值运算(使用 eval()内建函数)重新得到该对象,但 str()则有所不同。str() 致力于生成一个对象的可读性好的字符串表示,它的返回结果通常无法用于eval()求值, 但很适合用于 print 语句输出。需要再次提醒一下的是, 并不是所有 repr()返回的字符串都能够用eval()内建函数得到原来的对象: 
>>> eval(`type(type))`) 
File "<stdin>", line 1 
eval(`type(type))`) 

SyntaxError: invalid syntax 


也就是说 repr() 输出对 Python 比较友好, 而 str()的输出对人比较友好。虽然如此,
很多情况下这三者的输出仍然都是完全一样的。


核心笔记:为什么我们有了 repr()还需要``? 
在 Python 学习过程中,你偶尔会遇到某个运算符和某个函数是做同样一件事情。之所以如此是因为某些场合函数会比运算符更适合使用。举个例子, 当处理类似函数这样的可执行对象或根据不同的数据项调用不同的函数处理时,函数就比运算符用起来方便。另一个例子就是双星号(**)乘方运算和 pow()内建函数,x ** y 和 pow(x,y) 执行的都 是x的y次方。 
译者注:事实上 Python 社区目前已经不鼓励继续使用``运算符。 
 
 

2.标准类型运算符和内建函数 





3.类型工厂函数

Python 2.2 统一了类型和类, 所有的内建类型现在也都是类, 在这基础之上, 原来的所谓内建转换函数象 int(), type(), list() 等等, 现在都成了工厂函数。 也就是说虽然他们看上去有点象函数, 实质上他们是类。当你调用它们时, 实际上是生成了该类型的一个实例, 就象工厂生产货物一样。 下面这些大家熟悉的工厂函数在老的 Python 版里被称为内建函数: 
int(), long(), float(), complex() 
  str(), unicode(), basestring() 
  list(), tuple() 
  type() 


以前没有工厂函数的其他类型,现在也都有了工厂函数。除此之外,那些支持新风格的类的全新的数据类型,也添加了相应的工厂函数。下面列出了这些工厂函数: 
  dict()  bool()  set(), frozenset()  object() classmethod()  staticmethod()   super()  property()  file() 


4.标准类型的分类


如果让我们最啰嗦的描述标准类型,我们也许会称它们是 Python 的“基本内建数据对象原始类型”。 
  
 “基本”,是指这些类型都是 Python 提供的标准或核心类型。 
 “内建”,是由于这些类型是 Python 默认就提供的 
 “数据”,因为他们用于一般数据存储 
 “对象”,因为对象是数据和功能的默认抽象 

 “原始”,因为这些类型提供的是最底层的粒度数据存储 
 “类型”,因为他们就是数据类型 


不过, 上面这些描述实际上并没有告诉你每个类型如何工作以及它们能发挥什么作用。事实上, 几个类型共享某一些的特性,比如功能的实现手段, 另一些类型则在访问数据值方面有一些共同之处。我们感兴趣的还有这些类型的数据如何更新以及它们能提供什么样的存储。有三种不同的模型可以帮助我们对基本类型进行分类,每种模型都展示给我们这些类型之间的相互关系。这些模型可以帮助我们更好的理解类型之间的相互关系以及他们的工作原理。 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值