python3之python的核心数据类型(其他核心类型)
来源:互联网 发布:开机忘记密码 mac 编辑:程序博客网 时间:2024/06/06 18:47
python3之python的核心数据类型(其他核心类型)
----------
这与前边我们讲到的多态的思想有些关联,它是由python没有类型声明而发展出来的。就像你将会学到的那样,在python中,我们编写对象的接口(所支持的操作)而不是类型。不关注于特定的类型意味着代码会自动地适应它们中的很多类型,任何具有兼容接口的对象均能够工作,而不管它是什么对象类型。尽管支持类型检测(即使在一些极少数的情况下,这是必要的),你将会看到它并不是一个"python式"的思维方法,事实上,你将会发现多态也是使用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.pay66000.0隐含的'self'对象是我们把这叫做面向对象模型的原因,即一个类中的函数总有一个隐含的对象。
- python3之python的核心数据类型(其他核心类型)
- python3之python的核心数据类型
- python3之python的核心数据类型(数字)
- python3之python的核心数据类型(字符串)
- python3之python的核心数据类型(列表)
- python3之python的核心数据类型(字典)
- python3之python的核心数据类型(文件)
- python3之python的核心数据类型(元组)
- python3 内置核心数据类型
- Python核心数据类型及类型显示转换
- Python核心数据类型之字典15
- python:内置核心数据类型
- python核心数据类型 -- 概览
- python核心数据类型 -- 概览
- python核心数据类型 -- 概览
- [Python]核心编程之GUI编程(其他GUI初探)
- Python核心数据类型及其操作
- OS的核心类型
- .net调用java xfire发布的webservice封装soapheader头信息
- 求同心矩阵
- JavaScript面向对象编程
- 试玩java版 worldwind1.2
- 购物车的代码
- python3之python的核心数据类型(其他核心类型)
- SiteMap的WildCard匹配
- Oracle对象命名空间、dbms_stats、dbms_job相关资料
- 铁谱技术及其工业应用
- 一些非常有用的linux命令
- linux下用Mentohust替代锐捷
- 使用GDB调试开发板程序
- rac again 在新的机器上
- visual studio solution file *.sln文件无法双击打开解决办法