第四章 介绍Python对象类型
为什么使用内置类型
内置对象使程序更容易编写
内置对象是拓展的组件
内置对象往往比定制的数据结构更有效率
内置对象是语言标准的一部分
Python的核心数据类型
数字
字符串
列表
字典
元组
文件
其他类型(集合,类型,None,布尔型)
数字
import math
math.pi
math.sqrt(54)
import random
random.random()
random.choice([1,2,3,4])
字符串
序列操作
s=‘spam‘
len(s)
s[0]
s[1]
s[len(s)-1]== s[-1]
s[-2]
s[1:3] #分片操作
s[:-1]
s[:] #就是s
s+‘xyz‘ #字符串支持加号合并,将连个字符串合成一个新的字符串
s*8
字符串具有不可变性---在其创建后值不能改变,例如,你不能通过对其某一为之进
行赋值而改变字符串,但是你总是可以通过建立一个新的字符串以同一个变量名进行对其赋
值
类型特定的方法
s.find(‘pa‘) #函数返回传入子字符串的偏移量,没有找到的情况下返回-1
s.replace(‘pa‘,‘xyz‘) #搜索并进行替换
line=‘aaa,bbb,ccccc,dd‘
line.split(‘,‘)
s=‘spam‘
s.upper() #大写
s.isalpha() #判断是不是字母
line=line.restrip() #去除换行符
dir(S) 可以查找对象的所有属性
ord(‘a‘) 返回a的ascii码
Python允许字符串包括在单引号或者双引号中,它也能够在三引号中表示多行字符串的
形式
模式匹配
import re
match=re.match(‘Hellp[\t]*.(.*)world‘,‘Hello Python world‘)
match.group(1)
match=re.match(‘/(.*)/(.*)/(.*)‘,‘/usr/home/lqs‘)
match.groups()
列表 是一个任意类型的对象的位置相关的有序集合,它没有固定的大小,不想字符串,其
大小是可变
L=[123,‘spam‘,1.23]
len(L)
L[0]
L[:-1]
L+[4,5,6] #创建了一个新的列表
L #不变
L.append(‘NI‘)
L.pop(2)
M=[‘bb‘,‘aa‘,‘cc‘]
M.sort()
M.reverse()
边界检查 Python不允许引用不存在的元素
嵌套
M=[[1,2,3],
[4,5,6],
[7,8,9]]
列表解析
col2=[row[1] for fow in M]
[row[1] for row im M if row[1]%2==0]
diag=[M[i][i] for i in [0,1,2]]
doubles=[c*2 for c in ‘spam‘]
字典
D={‘food‘:‘spam‘,‘qian‘:4,‘color‘:‘pink‘}
D[‘food‘]
D[‘qian‘]+=1 字典具有可变性
a={}
a[‘name‘]=‘bob‘
a[‘age‘]=23
重访嵌套
rec={‘name‘:{‘first‘:‘bob‘,‘last‘:‘snuth‘},
‘job‘:[‘dev‘,‘mgr‘],
‘age‘:40.5}
rec[‘name‘]
rec[‘name‘][‘last‘]
rec[‘job‘].append(‘janitor‘)
D={‘a‘:1,‘b‘:2,‘c‘:3}
ks=D>keys()
ks.sort()
for key in ks:
print key,‘=>‘,D[key]
for key in sorted(D):
print key,‘=>‘,D[key]
迭代和优化
square=[x**2 for x in [1,2,3,4]]
square=[]
for x in [1,2,3,4]:
square.append(x**2)
不存在的键 if测试
D.has_key(‘f‘)
if not D.has_key(‘f‘):
print ‘missing‘
元组 是不可变的序列
T=(1,2,3)
文件
f=open(‘data.txt‘,‘w‘)
f.write(‘Hello\n‘)
f.write(‘world\n‘)
f.close()
f=open(‘data.txt‘)
bytes=f.read()
print bytes
bytes.split()
第五章 数字
数字常量
混合类型自动升级
传统除法,Floor除法和真除法
内置的int函数会将一个数字的字符串变换为一个整数,并可以通过定义的第二个参数来确
定变换后的数字的进制
int(‘0100‘,8) int(‘0x40‘,16)
eval(s)可以把一个八进制或者十六进制的字符串转换为正常的整数,但是开销更大可能导致
安全问题
int(2.56) round(2.567) round(2.567,2)
小数数字
from decimal import Decimal
Decimal(‘0.1‘)+Decimal(‘0.1‘)+Decimal(‘0.1‘)-Decimal(‘0.3‘)
第六章 动态类型简介
a=3
创建一个对象来代表值3
创建一个变量a,如果它还没有创建
把变量和新的对象3连接
变量是一个系统表的元素,拥有指向对象的连接的空间
对象是被分配的一块内存,有足够的空间去表现它们所代表的值
引用是自动形成的从变量到对象的指针
注意共享引用的问题
a=[1,2,3]
b=a
a=2
a=[1,2,3]
b=a
a[0]=2
a=[1,2,3]
b=a[:]
a[0]=2
对于字典共享引用的问题解决使用copy deepcopy方法
L=[1,2,3]
M=L
L==M TRUE
L is M TRUE
==是测试两个被引用的对象是够具有相同的值
is操作符是检查对象的同一性