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

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

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
>>>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中略有不同,因为类型已经完全和类结合起来了,如例:

复制代码
1
2
3
4
5
6
7
8
9
10
#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种方法可以做到这点:
复制代码
1
2
3
4
5
6
7
8
9
>>>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中的面向对象编程(这门语言一个可选的但很强大的特性)。用抽象的术语来说,类定义了新的对象类型,扩展了核心类型。如例:

复制代码
1
2
3
4
5
6
7
8
>>> 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参数):

复制代码
1
2
3
4
5
6
7
8
9
>>>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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部