我是靠谱客的博主 复杂牛排,最近开发中收集的这篇文章主要介绍python3之python的核心数据类型(其他核心类型),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

python3之python的核心数据类型(其他核心类型)
----------

到目前为止除了我们看到的核心类型外,还有其他的或许能够称得上核心类型的类型,这取决于我们定义的分类有多大。例如,集合是最近增加到这门语言中的类型它不是映射也不是序列,相反,它们是唯一的不可变的对象的无序集合。集合可以通过调用内置set函数而创建,或者使用python3.0中新的集合常量和表达式创建,并且它支持一般的数学集合操作(python3.0中新的用于集合常量的{....}语法是有意义的,因为集合更像是一个无值的字典的键):

>>>X=set('spam')
>>>Y={'h','a','m'}
>>>X,Y
({'a','p','s','m'},{'a','h','m'})
>>>X&Y
{'a','m'}
>>>X|Y
{'a','p','s','h','m'}
>>>X-Y
{'p','s'}
>>>{x**2 for x in [1,2,3,4]}
{16,1,4,9}
此外, python最近添加了一些新的数值类型:十进制数(固定精度浮点数)和分数(有一个分子和一个分母的有理数)。它们都用来解决浮点数学的局限性和内在的不精确性。(例子略) python最近还添加了布尔值(预定义的True和False对象实际上是定制后以逻辑结果显示的整数1和0),以及长期以来一直支持的特殊的占位符对象None(它通常用来初始化名字和对象)

如何破坏代码的灵活性
注意:内置函数type返回的类型对象是赋给该类型的另一个对象的一个对象(听起来好像是java中的反射,未确定!!!!),其结果在python3.0中略有不同,因为类型已经完全和类结合起来了,如例:

#In Python 2.6:
>>>type(L)
<type 'list'>
>>>type(type(L))
<type 'type'>
#In python 3.0:
>>>type(L)
<class 'list'>
>>>type(type(L))
<class 'type'>
除了允许交互地探究对象,这个函数的实际应用是,允许编写代码来检查它所处理的对象的类型。实际上,在python脚本中至少有3种方法可以做到这点:
>>>if type(L) == type([]):
print('yes')
yes
>>>if type(L) == list:
print('yes')
yes
>>>if isinstance(L,list):
print('yes')
yes
现在本书已经介绍了所有的类型检验的方法,尽管这样, 我们不得不说,就像在本书后看到的那样,在python程序中这样做基本上都是错误的(这也是一个有经验的C程序员刚开始使用python时的一个标志)。在本书后面, 当我们开始编写函数这样较大的代码单元的时候,才会澄清其原因但这是一个(可能是唯一的)核心python概念在代码中检验了特定的类型,实际上破坏了它的灵活性,即限制它只能使用一种类型工作。没有这样的检测,代码也许能够使用整个范围的类型工作
这与前边我们讲到的多态的思想有些关联,它是由python没有类型声明而发展出来的。就像你将会学到的那样,在python中,我们编写对象的接口(所支持的操作)而不是类型。不关注于特定的类型意味着代码会自动地适应它们中的很多类型,任何具有兼容接口的对象均能够工作,而不管它是什么对象类型。尽管支持类型检测(即使在一些极少数的情况下,这是必要的),你将会看到它并不是一个"python式"的思维方法,事实上,你将会发现多态也是使用python的一个关键思想

用户定义的类
我们将深入学习python中的面向对象编程(这门语言一个可选的但很强大的特性)。用抽象的术语来说,类定义了新的对象类型,扩展了核心类型。如例:

>>> class Worker:
def __init__(self,name,pay):
self.name=name
self.pay=pay
def lastName(self):
return self.name.split()[-1]
def giveRaise(self,percent):
self.pay *= (1.0+percent)
这个类定义了一个新的对象的种类,有name和pay两个属性,也有两个方法( 注意:__init__这个方法,前后都是两个下划线,不然会报错的)。 就像函数那样去调用类,会生成我们新类型的实例,并且类的方法调用时, 类的方法自动获取被处理的实例(其中的self参数):

>>>bob=Worker('Bob Smith',50000)
>>>sue=Worker('Sue Jones',60000)
>>>bob.lastName()
'Smith'
>>>sue.lastName()
'Jones'
>>>sue.giveRaise(.10)
>>>sue.pay
66000.0
隐含的'self'对象是我们把这叫做面向对象模型的原因,即一个类中的函数总有一个隐含的对象。


最后

以上就是复杂牛排为你收集整理的python3之python的核心数据类型(其他核心类型)的全部内容,希望文章能够帮你解决python3之python的核心数据类型(其他核心类型)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部