python之路-------第4章、介绍python对象类型

来源:互联网 发布:java中参数是什么意思 编辑:程序博客网 时间:2024/05/16 18:16
对象是内存中的一部分,包含数值和相关操作的集合。python可以分解成模块、语句、表达式以及对象:程序由模块构成、模块包含语句、语句包含表达式、表达式建立并处理对象。
1.1、为什么使用内置类型?
使用c或c++,很大一部分工作集中于对象,需要部署内存结构、管理内存分配、实现搜索和读取进程。而python不是这样,它提供了强大的对象类型作为语言的组成部分。
除非有内置类型无法提供的特殊对象要处理,所以最好总是使用内置对象而不是使用自己的实现。
1.2、python核心的数据类型
函数、模块和类这样的编程单元在python中也是对象,它们是由def、import、class这样的表达式和语句创建;一个方括号的表达式会生成一个列表,大括号的表达式会建立一个字典;python中没有类型声明,运行的表达式的语法决定了创建和使用的对象的类型;一旦创建了一个对象,它就和操作集合绑定了-只可以对字符串进行字符串相关的操作。python是动态类型的(它自动地跟踪变量的类型),但是它是强类型语言。列表提供了其他对象的有序集合,而字典是通过键存储对象的。列表和字典都可以嵌套,可以随需求扩展和删减,并能够包含任意类型的对象。
print(sys.modules)  ##只列出当前已经import的module,磁盘上没有import的模块不会被列出来
{'tokenize': <module 'tokenize' from '/usr/lib64/python2.6/tokenize.pyc'>, 'copy_reg': <module 'copy_reg' from '/usr/lib64/python2.6/copy_reg.pyc'>}
1.2.1、数字
+、*、**(表示乘方)
len(str(2**1000000))/random.random()/random.choice([1,2,3,4])
1.2.2、字符串
序列中的元素包含了一个从左到右的顺序-序列中的元素根据它们的相对位置进行存储和读取。严格讲,字符串是单个字符的字符串的序列。
字符串的正反向索引操作和分片操作。分片的一般形式x[i:j],表示取出在x中从偏移量i开始,直到但不包括偏移量为j的内容。分片中,左边界默认是0,并且右边界默认为分片序列的长度。+(字符串合并操作)、*(字符串重复操作)一个方法的意义取决于被操作的对象,这种多态的特性给python代码带来了很大的简洁性和灵活性。由于类型并不受约束,python编写的操作通常可以自动地适用于不同类型的对象。
1.2.3、不可变性
不可变性:创建后不能就地改变
python中每一个对象都可以分为不可变性或可变性。核心类型中,数字、字符串和元组是不可变的;列表和字典是可变的。
1.2.3、类型的方法
一条简单的法则是这样的:可作用于多种类型的通用型操作都是以内置函数和表达式的形式出现的,例如len(x)、x[0],但是类型特定的操作都是以方法调用的形式出现的。
1.3、模式匹配
re模块包括了类似搜索、分割和替换等调用。
1.4、列表
python的列表与其他语言中的列表类似;python的列表没有固定类型的约束;python列表没有固定大小,可以按需扩充或缩减列表大小。
1.4.1、列表的序列操作
>>> l=[123,'spam',1.23]
>>> dir(l)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
1.4.2、类型特定的操作
>>> l
[1.23, 'spam', 123]
>>> l.sort()
>>> l
[1.23, 123, 'spam']
>>> l.reverse()
>>> l
['spam', 123, 1.23]
1.5、嵌套
python核心数据类型的一个优秀特性就是它们支持任意的嵌套,能够以任意的组合对其进行嵌套,并可以多层进行嵌套。
1.6、pass语句是无运算的占位语句,当语法需要语句并且没有任何实用的语句可写时,就可以使用它。
while <test>:
<statements1>
else:
<statements2>
python不允许赋值语句出现在应该是表达式出现的地方;C语言赋值运算会返回被赋值后的值,但python赋值语句只是语句,不是表达式。
for循环时python中一个通用的序列迭代器:可以遍历任何有序的序列内的元素,for语句可用于字符串、列表、元组、其他内置可迭代对象以及之后能够通过类所创建的新对象
for <target> in <object>
<statements>
if <test>: break
if <test>: continue
else:
<statements>  ##if we didn't hit a break
python运行for循环时,会逐个讲序列对象中的元素赋值给目标,然后为每个元素执行循环主体。
1.7、循环计数器:while、range
range函数是通用的工具,range常用在for循环中产生索引,但是也可以用在任何需要整数列表的地方。
range函数使用一个参数时,range会产生从0算起递增1的整数列表,但其中不包含该参数的值;当有2个参数时,第一个视为下边界;当有3个参数时,第三个参数提供步进值。eval函数:eval(str [,globals [,locals ]]) ,可以用来讲字符串str当成有效python表达式求值,并返回计算结果
1.8、并行遍历:zip和map
内置函数range可以在for循环中以非完备的方式遍历序列;for (x,y) in zip(list1,list2),for循环使用元组赋值运算来解包zip结果中的每一个元组。
使用dict构造函数,可以把列表或zip过的键/值对列表,转换为字典类型;什么是列表解析和python3.0的字典解析??







0 0