Python基础

Python数据类型与数据结构

  1. 数字(Numbers)

    ​ 整数(int)

    ​ 浮点数(float)

    ​ 复数(complex)

  2. 字符串(String)

  3. 布尔型(Boolean)

  4. 列表(List)

  5. 元组(Tuple)

  6. 字典(Dictionary)

  7. 集合(set()/frozenset())

  8. 空(None)


Numbers

int(整型)

​ 也即整数。

​ Python3 中可以使用如下代码获取int类型”最大值“

1
2
>>> import sys
>>> sys.maxsize #Python2 中使用sys.maxint,int类型最大值有实际限制。

输出:

1
9223372036854775807

在32位机器上,整数的位数为32位,取值范围为-231~(231)-1,即-2147483648~2147483647; 在64位系统上,整数的位数为64位,取值范围为-263~(263)-1,即-9223372036854775808~9223372036854775807;

小整数对象——小整型对象池

在实际编程中,数值比较小的整数,比如1,2,29等,可能会非常频繁的出现。而在python中,所有的对象都存在于系统堆上。如果某个小整数出现的次数非常多,那么Python将会出现大量的malloc/free操作,这样大大降低了运行效率,造成大量的内存碎片,严重影响Python的整体性能。

在Python2.5乃至3.3中,将小整数位于[-5,257)之间的数,缓存在小整型对象池中。


long(长整型)

​ Python3中统一称为int。


float(浮点数)

​ 即小数。

​ 类似于C语言中的double类型,64位系统中占8个字节,其中52位表示底,11位表示指数,剩下的一位表示符号。


complex(复数)

​ a + bj

j为虚数单位。


boolean(布尔类型)

​ True or False

​ 进行逻辑运算。


String(字符串)

​ 即文本。

123‘123’的区别就在,前者为int,后者为String。当然在输出显示中,都是123,需要区分。

​ Python的String有2种排列顺序

字符串索引

使得不知道字符串长度的情况下,可以从后开始取得字符串内部分元素。


以上为不可变类型,即改变数据,会重新分配内存地址:

1
2
3
4
5
6
>>> a = 1
>>> id(a)
140718923109408
>>> a = 2
>>> id(a)
140718923109440

List(列表)

​ 个人理解为可改变(插入、删除······)的有序集合。

​ “定义”为List类型的是:[]

List索引方式与String相同:

列表索引
1
2
3
4
>>> First = ['q', '123', 123]
>>> Second = [First, '2', 'qwe']
>>> Second
[['q', '123', 123], '2', 'qwe']

List为可变类型。


Tuple(元组)

​ 与List极其类似,个人理解为不可变(插入、删除······)的有序集合。

​ Tuple用()"定义"

Tuple索引方式与String相同

但是Tuple不可改变!


Dictionary(字典)

DictionaryList也类似,但是不通过偏移来索引,而是通过“key”

Dictionary通过{}来“定义”

Dictionary中,keyvalue建立一一对应的关系,就像字典一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> Students = {'name':'QCF','age':20,'sex':'male' }
>>> Students
{'name': 'QCF', 'age': 20, 'sex': 'male'}

>>> Students['nation']='China'
>>> Students
{'name': 'QCF', 'age': 20, 'sex': 'male', 'nation': 'China'}

>>> Students['name']
'QCF'

>>> del Students['name']
>>> Students
{'age': 20, 'sex': 'male', 'nation': 'China'}

Dictionary

List比较,Dictionary的特点有:

  1. 查找和插入的速度极快,不会随着key的增加而变慢;
  2. 需要占用大量的内存,内存浪费多。

List相反:

  1. 查找和插入的时间随着元素的增加而增加;
  2. 占用空间小,浪费内存很少。

所以,Dictionary是用空间来换取时间的一种方法。

Dictionary可以用在需要高速查找的很多地方,Dictionary的key必须是不可变对象


set() / frozenset()(集合)

​ 实际上为函数,是一个无序不重复元素集合,有 - 、& 、 | 、 ^ 运算。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> a = set('runobb') # 集合,无顺序,可去掉重复元素
>>> b = set('google')
>>> a
{'u', 'n', 'b', 'o', 'r'}
>>> b
{'o', 'e', 'l', 'g'}

# 差集 -
>>> a - b
{'n', 'u', 'b', 'r'}

# 交集 &
>>> a & b
{'o'}

# 并集 |
>>> a | b
{'l', 'u', 'g', 'n', 'b', 'e', 'o', 'r'}

# 对称差集 ^ (等同于从 并集 中去掉 交集 )
>>> a ^ b
{'l', 'u', 'g', 'n', 'e', 'b', 'r'}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# set 转成 List 
>>> a = set('Google')
>>> type(a)
<class 'set'>

# 使用list()函数转换成list类型
>>> alist = list(a)
>>> type(alist)
<class 'list'>

>>> alist
['l', 'g', 'G', 'e', 'o']

# .sort()函数对alist元素按照alphabet或数字从小到大排序
>>> alist.sort()
>>> alist
['G', 'e', 'g', 'l', 'o']
1
2
3
4
5
6
7
8
9
10
11
# List 转成 set
>>> a = ['Google','123',1]
>>> type(a)
<class 'list'>

# 使用set()函数转换成set类型
>>> aset = set(a)
>>> aset
{'123', 'Google', 1}
>>> type(aset)
<class 'set'>

NoneType(空)

​ 特殊类型,只有None。

​ 返回值为False。

​ 与‘0’不同


Python基础语句

if else

1
2
3
4
5
6
if () and ():
# 语句1
elif () or ():
# 语句2
else:
# 语句3

case switch语句还可以利用字典达成。


for 有限循环

1
2
3
4
5
6
for var in Sequence:
# 语句1
for i in range(1:101): # 1~100,range(101):0~100
# 语句2
for i in 'HelloWorld': # 利用字符串索引元素
# 语句3

已知循环次数。

range()返回值为一生成器。


while 无限循环

当不满足条件时执行代码,满足时跳出循环。

1
2
3
4
while Boolean Expression:
# 语句1
while True: # 死循环,while 1:也可
# 语句2

未知循环次数时使用。

None返回值为False(0)


continue:重新执行循环

break:跳出循环

pass:空语句(用于占位)


try except 异常处理

1
2
3
4
5
6
7
8
9
10
try:
# 测试语句
except [异常名称1] [异常数值1]:
# 异常处理语句1
except [异常名称2] [异常数值2]:
# 异常处理语句2
else:
# 未出现异常时的语句
finally:
# 必须执行的语句
异常名称 描述
BaseException 所有异常的基类
SystemExit 解释器请求退出
KeyboardInterrupt 用户中断执行(通常是输入^C)
Exception 常规错误的基类
StopIteration 迭代器没有更多的值
GeneratorExit 生成器(generator)发生异常来通知退出
StandardError 所有的内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
ZeroDivisionError 除(或取模)零 (所有数据类型)
AssertionError 断言语句失败
AttributeError 对象没有这个属性
EOFError 没有内建输入,到达EOF 标记
EnvironmentError 操作系统错误的基类
IOError 输入/输出操作失败
OSError 操作系统错误
WindowsError 系统调用失败
ImportError 导入模块/对象失败
LookupError 无效数据查询的基类
IndexError 序列中没有此索引(index)
KeyError 映射中没有这个键
MemoryError 内存溢出错误(对于Python 解释器不是致命的)
NameError 未声明/初始化对象 (没有属性)
UnboundLocalError 访问未初始化的本地变量
ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError 一般的运行时错误
NotImplementedError 尚未实现的方法
SyntaxError Python 语法错误
IndentationError 缩进错误
TabError Tab 和空格混用
SystemError 一般的解释器系统错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
UnicodeError Unicode 相关的错误
UnicodeDecodeError Unicode 解码时的错误
UnicodeEncodeError Unicode 编码时错误
UnicodeTranslateError Unicode 转换时错误
Warning 警告的基类
DeprecationWarning 关于被弃用的特征的警告
FutureWarning 关于构造将来语义会有改变的警告
OverflowWarning 旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning 关于特性将会被废弃的警告
RuntimeWarning 可疑的运行时行为(runtime behavior)的警告
SyntaxWarning 可疑的语法的警告
UserWarning 用户代码生成的警告