Python语言中,数据以对象的形式出现,无论是Python提供的内置对象,还是使用Python语言创建的对象。
程序-〉模块-〉语句-〉表达式-〉处理对象
为何区分对象类型
1 不同类型对象运算规则不同
2 不同类型对象在计算机内表示方式不同
3 为何区分整数与浮点数
浮点数表达能力更强
浮点数有精度损失
CPU有专门的浮点运算部件
>>> print(3.3==1.1*3)
False
内置对象一览
对象类型例子
数字123,12.5,5+10j
字符串'hello world!',"Python is best."
元组(5,'spam',12,'A')
列表[1,2,[3,4,'haha'],5]
字典{'abc':123,'efg':456,'qwer':'1234'}
集合{1,2,3,4,5} ,set('hello world!')
文件myfile = open('test.py','r')
其他None,布尔型
数字
int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
float(浮点型)
浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
complex(复数)
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
字符串
字符串(String)是一个字符的序列,用于记录文本信息。序列中的元素包含一个从左到右的顺序,可以根据它们的相对位置进行存储和读取,其他类型的序列包括列表和元组。
注:不可变序列只能通过位置读取,不能存储(字符串和元组是不可变序列)。
三种定义方式:
单引号括起来
s = 'hello world'
双引号括起来
s = "hello world"
三引号括起来("""或''')
s = """this is a test
hello world."""
用转义序列代表特殊字符
\\ --反斜线(保留\)
\' --单引号
\" --双引号
\n --换行
\t --水平制表符
\v --垂直制表符
\r --回车
抑制转义
>>>s = r'D:\tmp\a.txt'
>>>s
'D:\\tmp\\a.txt'
基本运算
长度(len()函数)
拼接(+)
重复(*)
成员运算符(in)
示例:
计算字符串中元音字母数目
def vowels_count(s):
ret= 0
foritem in s:
ifitem in 'aeiouAEIOU':
ret+=1
returnret
索引与分片
Python语言中索引是按照最前面的偏移量进行编码,索引的起始位置为0。
例如:
>>>s = 'Hello'
>>>s[0]
'H'
>>>s[2]
'l'
Python语言支持反向索引,从最后一个开始,其索引值是-1
>>>s[-1]
'o'
>>>s[-2]
'l'
分片操作,从序列对象中提取一部分。一般形式为X[I,J],表示从序列对象X中提取从偏移为I,直到但不包括J的内容。
例如:
>>>s[1:3]
'el'
>>>s[1:-1]
ell
分片操作中,左边界默认为0,右边界默认为序列长度,这样可以在分片时省略左右边界。
例如:
>>>s[:-1]
'Hell'
>>>s[2:]
'llo'
>>>s[:]
'Hello'
扩展分片,可选的第三个索引,用于步进。形式X[I,J,K],表示对序列X从偏移I,直到偏移J-1,每隔K个元素提取一个对象。K默认值为1。
例如:
>>>s='abcdefghijklmnopqrstuvwxyz'
>>>s[1:10:3]
'beh'
>>>s[::4]
'aeimquy'
>>>s[::-1]
'zyxwvutsrqponmlkjihgfedcba'
>>>s[5:1:-2]
'fd'
字符串方法
replace(old,new,count=-1) 替换子串
find(sub) 寻找子串,找到返回子串位置,否则返回-1
split(sep) 字符串切分,根据sep切分为字符串数组
更多方法:
>>> dir(str)
['__add__', '__class__', '__contains__',
'__delattr__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__',
'__getitem__', '__getnewargs__', '__gt__',
'__hash__', '__init__',
'__init_subclass__', '__iter__', '__le__', '__len__', '__lt__',
'__mod__', '__mul__', '__ne__', '__new__',
'__reduce__','__reduce_ex__',
'__repr__', '__rmod__', '__rmul__',
'__setattr__', '__sizeof__', '__str__',
'__subclasshook__', 'capitalize',
'casefold', 'center', 'count', 'encode', 'endswith',
'expandtabs', 'find', 'format',
'format_map', 'index', 'isalnum', 'isalpha',
'isascii', 'isdecimal', 'isdigit',
'isidentifier', 'islower', 'isnumeric', 'isprintable',
'isspace', 'istitle', 'isupper', 'join',
'ljust', 'lower', 'lstrip', 'maketrans', 'partition',
'replace', 'rfind', 'rindex', 'rjust',
'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines',
'startswith', 'strip', 'swapcase', 'title',
'translate', 'upper', 'zfill']
字符串比较
按顺序依次比较每个位置上的字符,如果相同就比较下一个,如果不同大小关系就由这两个字符的大小关系决定。
字符串格式化format方法
{}的格式 {field name,align
width.precision type}
print("PI is {}".format(math.pi))
print("PI is
{:4.2f}".format(math.pi))
列表与元组
内建数据结构,用来存储一系列元素,列表与元组的区别是,元组是不可变对象,不能修改,列表可以修改。
元组:
t = (1,2,3,4,5)
列表
l = [1,2,3,4,5]
列表和元组与字符串一样,都是有序序列,所以列表和元组与字符串有很多相同点:
1 索引运算[]
2 切片[:]
3 拼接和重复 + *
4 成员运算 in
5 长度 len
6 循环迭代 for
与字符串只能包含字符不同,列表和元组可以包含多种类型的对象。
列表的方法
append() #追加
extend() #扩充
pop() #删除
remove() #删除
sort() #排序
reverse() #逆序
列表赋值
a = [1,2,3,4]
b = a
b[1] = 100
b = [:]
b[1] = 100
嵌套列表
x = [[1,2,3,[4,5,6],[7,8,9]]]
len(x) = ?
len(x[1]) = ?
列表解析
列表解析:由原列表创建新列表的简单方法。列表解析语法是从集合理论表示法中的一种结构衍生出来的,也就是对集合中的每个元素应用某一种运算。
[表达式 for 变量 in 列表 if 条件]
例如生成x平方的序列:
ist= []
forx in range(1,10)
ist.append(x**2)
print(ist)
列表解析:
ist= [x**2 for x in range(1,10)]
使用列表解析求输入数字x的因数和
例如输入6 ,因数和为1+2+3+6 = 12
sum([i for i in range(1,x+1) if x%i == 0])
字典与集合
字典:一系列“键-值(key-value)”对
通过“键”查找对应的“值”
电话本,字典
java中的Map
(HashTable,HashMap)
创建字典
使用{}创建字典
使用:指明键:值对
myDict = {'小李':87977111,'李明':13598881112,'小丁':98761221}
字典中的键必须是不可变的且不可重复,值可以是任意类型。
访问字典
使用[]运算符,键作为索引
print(myDict['小李'])
增加新的键值对:
myDict['小王']=17621231232
字典运算符和方法
len
keyin myDict
forkey in myDict
myDict.items() #全部键值对
myDict.keys() #全部键
myDict.values() #全部值
myDict.clean() #清空字典
示例:
计算一个字符串中每个字母出现的次数
count = {}
for i in 'hello world':
ifi in count:
count[i]+= 1
else:
count[i]= 1
集合(Set)
无序不重复元素集
和字典类似,但是只有“键”没有“值”
创建
x =set()
x ={key1,key2,...}
添加和删除
x.add()
x.remove()
集合的运算符
- 差集
& 交集
| 并集
!= 不等于
== 等于
in 成员
for key in set 枚举
文件
计算机中由操作系统管理的具有名字的存储数据的基本单元。
内置open函数
open(file, mode='r', encoding=None)
file -- 文件名
mode --模式 r读; w写; a追加; b 二进制模式;t文本模式;+ 同时读写
encoding --编码(只对文本模式有效,默认取系统编码,可参考codesc模块)
文件对象的方法:
file.read() --把整个文件读入单一字符串
file.read(N) --读取N个字节到一个字符串
file.readline() --读取下一行(包括换行符)
file.readlines() --读取整个文件到字符串列表(可迭代对象)
file.write(aString) --写入字符串到文件
file.writelines(aList) --把列表内所有字符串写入文件
file.close() --关闭文件
file.flush() --输出缓冲区刷新到硬盘
file.seek(N) --文件指针向后跳转到偏移量N处
注:目前的Python解释器在回收文件对象时,会自动关闭文件,这意味着并不需要总是手动关闭文件,但这并不是语言定义的一部分,所以手动调用close方法关闭文件是个好习惯。