一,我心向道,情有所亏。
一般使用内置类型
Python 对象的相关术语
Python 程序中保存的所有数据都是围绕对象这个概念展开的
1,程序中存储的所有数据都是对象
2,每个对象都有一个身份,一个类型和一个值、
例如:School=“MaGe Linux” 会以"MaGe Linux"创建一个字符串对象,其身份是指向它在内存中所处位置的指针(其在内存中的地址),而School 就是引用这个具体位置的名称
3,对象的类型也称对象的累别,用于描述对象的内部表示及它支持的方法和操作
4,创建特定类型的对象时,有时也将该对象称为该类型的实例
5,实例特定的对象时,有时也将该对象称为该类型的实例
6,实例被创建后,其身份和类型就不可改变(意思是改变的是同一个内存ID号的值)
·如对象值是可修改的,则称为可变对象
·如对象的值是不可修改,则称为不可变对象
7,如果某个对象包含对其它对象的引用,则将其成为容器
8,大多数对象都拥有大量特有的数据属性和方法
属性:与对象相关的值
方法:被调用时将在对象上执行某些操作的函数
使用点(.)运算符可以访问属性和方法
class :自定义类型
type:
instance:实例化
类:数据和方法组成
数据:变量
方法:函数
类:实例化对象
CA:
IA:
IB:
对象的身份与类型
Python内置函数id()可返回一个对象的身份,即该对象在内存中的位置
1,is 运算符用于比较两个对象的身份
2,type()用于返回一个对象的类型
3,对象类型本身也是一个对象,称为对象的类
·该对象的定义是唯一的,且对于某类型的所有实例都是相同的
·所有类型对象都有一个指定的名称,可用于执行类型检查,如list , dict
is 的作用 如同 “==”
两个对象比较
1,值比较:对象中的数据时否相同;
2, 身份比较:两个变量名引用的是否为同一对象;
3,类型比较:两个对象的类型是否相同;
核心数据类型
数字:int,long,float,complex(负数),bool()布尔型
字符:str,unicode
列表:list
字典:dict
元组:tuple
文件:file
其它类型:集合(set),frozenset(冻结类集合,不可变), 类类型(是对象,实例对象),none 空
其它文件类型工具:pipes , fifos,sockets
类型转换:
str(),repr()或format(),将非字符型数据转换为字符
int():转为整数
float():
list(s):将字串S 转为列表 输出以中括号[]
tuple(s):将字串S转为元组 输出以括号()
set(s):将字串S转为集合 输出以([]) 然后会去掉重复值
dict(d):创建字典 其d必须是(key,value)的元组序列;
d必须是列表中是元组 例如:
num = [('a',1),('b',11),('c',45)]
字典是没有次序的,所以没有排序
chr(x):将整数转为字符
ord(x):将字符转换为整数值
hex(x):将整数转换为16进制字符串
bin(x):
oct(x):
数字类型:
python 的数字字面量:布尔型,整数,浮点数,复数;
True : 1
False : 0
数字类型是不可变类型
序列类型
1,序列表示索引为非负整数的有序对象集合,包括字符串,列表和元组
·字符串是字符的
·列表和元组是任意Python对象的序列
2,字符和元组属于不可变序列,而列表则支持插入,删除和替换元素
3,所有序列都支持迭代
字符类型:
字符串字面量:把文本放入单引号,双引号或三引号中:
如果要使用unicode编码,则在字符之前使用字符u进行标识,如:u"hello world"
strl = u"hello world"
type(strl)
文档字串:模块,类或函数的第一条语句时一个字符的话,该字符串数就成为文档字符串,可以使用_doc_属性引用:
运算符“
索引运算:[i]
切片运算:[i:j]
扩展切片:[i:j:stridge] ” 是怎么运算的
i为起始
j为结束
stridge 为步长(截取的步子后的长度)
如下所示
a = (1,2,3,4,5,6,7)
a [4::-2]
截取的数值为 4到0 ,也就是 0.1.2.3.4位。所对应的数值为:1,2,3,4,5
然后进行-2的步长截取。 也就是从5开始 -1 -2 将4去掉。留下5,3 然后从3开始 -1 -2将2去掉,留下1 。最后答案为 [5,3,1]
使用于字符串的操作
Python 2提供两种字符串对象类型
·字节字符串:直接(8bit数据)序列
·Unicode字符串:Unicode字符(16bit数据)序列
Python 可以使用32 bit整数保存Unicode 字符,但此为可选特性
可用于列表的方法
列表:list
容器类型
任意对象的有序集合,通过索引访问其中的元素,可变对象。
异构,任意嵌套
支持在远处修改
修改指定的索引元素,修改其指定的分片,删除语句,内置方法。
相加操作:如同 L1+L2:合并两个列表,返回一个新的列表,不会修改原列表。
相乘操作:如同 L1 * 3 表示重复3次。或者为N 的话,便是重复N次。
in :成员关系判断符,在指定容器中是否出现了指定的元素。返回True或者False!
用法:item in container.
not in
range():生成器 如:range(10) : 0,1,2,3,4,5,6,7,8,9
列表解析:
列表被 用等号时。是进行重新指定内存
如同 L1 = L2 则L1 的指针会指到L2的位置
import copy
copy.deepcopy 这个则是可以进行 对象复制,而不用指到同一个列表的内存位置。
如:L5 = copy.deepcoy(L1)
1,list(s)可将任意可迭代类型转换为列表,而如果s已经是一个列表,则该函数构造的新列表是s的一个浅复制
元组:
表达式符号:()
容器类型
任意对象的有序集合,通过索引访问其中的元素,不可变对象,长度固定
异构,嵌套
常见操作:
定义元组:可以省略小括号。如:
T4 = 'x','y','z'
in:
not in:
T1+T2:合并两个元组
T1 * N:N表示重复次数
虽然元组本身不可变,但如果元组内嵌套了可变类型的元素,那么此类元素的修改不会返回新元组
字典: dict
字典在其它变成语言中又称作关联数组或者散列表;
通过键实现元素存取;无序集合;可变类型容器;长度可变,支持异构,支持嵌套;
{key1:value1,key2:value2,…}
空字典:{}
{‘x’:32,‘y’:[1,2,3,4]}
而字典内部可以嵌套:字典,列表,元组
字典复制:d2 = d1.copy 这样d2的内存ID 跟 d1的ID 就不会一样
而 d2 = d3 复制,则是d2的指向内存ID 会等于d3的内存ID
help(dict.items)
d1.iteritems:返回一个迭代器对象
d2 = dict(name = 'jerry',age=42,gender='m'):同样是定义字典的方式
zip('xyz','123') 返回
[('x','1'),('y','2'),('z','3')]
dict(zip('xyz','123')) 返回
{'x':'1','y',:'2','z':'3'}
字典的生成方式
d1 = {}
d1[‘x’] = 1
d1[‘y’] = (1,2,3,4)
d1[‘z’] = [1,2,3,4]
print d1
{‘y’: (1, 2, 3, 4), ‘x’: 1235, ‘z’: [1, 2, 3, 4]}
可调用对象,以及列表和字典的远原处修改特性
类:数据 + 方法
实例:
点好运算符: ?
属性:数据
方法:操作()
可调用对象检查:callable()
可调用对象包含:函数,类,对象中的方法等等。
'',"",''' ''',""" """,字串
列表:[]
元组:()
字典:{}
数值:
获取对象支持使用的属性和方法:dir()
某方法的具体使用帮助:help(list.pop)
获取可调用对象的文档字串:print obj.doc
集合:无序排列、可哈希:
支持集合关系测试:
in
not in
迭代
无法支持索引,或者说是切片。
集合的类型:set(),frozenset()
没有特定语法格式:
容器、类型、对象
1、
2、所有对象都有引用计数
sys 模块中有一个getrefcount()计数
3、列表和字典都支持两种类型的复制操作:浅复制和深复制;深复制可使用copy模块中的deepcopy()实现。
潜复制:只是指向原来的内存位置。
深复制:重新创建一个内存位置。
4、Python中的所有对象都是“第一类”,这意味着使用标识符命名的所有对象都具有相同状态;于是,能够命名所有对象都可以直接当数据进行处理。
5、所有序列都支持迭代
6、所有序列都支持的操作和方法;
7、可变序列的操作;
Python 的表达式和语句:
表达式:
语句:
Python中的常用的表达式操作符:
x*y,x/y,x+y,x-y,x//y,x%y
逻辑运算:
x or y, x and y ,not x
成员关系运算:
x in y ,x not in y
对象实例测试:
x is y, x not is y
比较运算:
x<y,x>y,x<=y,x>=y,x==y,x!=y
位运算:
x|y,x&y,x^y
一元运算:
-x,+x,~x:
幂运算:
x**y
x[i],x[i:j],x[i:j:stride]
调用:
x(…)
取属性
x.attribute
定义元组的云算法:
(…)
定义序列:
[]
字典:{…}
三元选择表达式:x if y else z
匿名函数表达式:lambda args:expression
生成器函数发送协议:yield x
运算优先级:
(…),[…],{…}
s[i],s[i:j]
s.attribute
s(…)
+x,-x,~s
x**y
*,/,//,%
- , -
<< , >>
&
^
|
<,<=,>,>=,==,!=
is ,not is
in ,not in
not
and
or
lambda
Python 的语句:
赋值语句:
函数调用:
print :用于打印调用的
if /elif /else:条件判断
for / else:序列迭代
while / else:普通循环
pass : 占位符
break :
continue:
def:
return:
yield:
global:命令空间
raise:触发异常
import:
from :模块属性访问
class:类
try/except/finally:捕捉异常
del:删除引用
assert:调试检查
with / as :环境管理器
Python 赋值语句:
隐式赋值:import ,from , def , class , for , 函数参数
元组和列表分解赋值:当赋值符号(=)的左侧为元组或列表时,Python会按照位置把右边的对象和左边的对象自左而右逐一进行匹配对;个数不同时会触发异常,此时可以切片的方式进行;
例如:
n1 = ('Sun','Sat','She')
x,y,z = n1
那么x会指向Sun
y会指向Sat
x会指向She
可以进行多重赋值
比如: n1 = n2 = n3 = 44
增强赋值:+=,-=,*=,/=,//=,%=,