最近多了一些空余时间,因此决定利用起来学习一下Python,有了一定的c++基础,Python学习起来确实要简单的多。以下为学习总结,基于Python3,主要与c++作对比,学习资料来源于Python教程-廖雪峰

  • Python中的数据类型

1.整数(int)

Python中的整数类似于c++中的int,但是不同于c/c++的是Python可以处理任意大小的整数。在Python内部对整数的处理分为普通整数和长整数,普通整数长度为机器位长,通常都是32位,超过这个范围的整数就自动当长整数处理,而长整数的范围几乎完全没限制。

2.浮点数(float)

Python中的浮点数类似于c++中的double,在Python中没有float和double之分,同一称为浮点数。

3.字符串(String)

Python中的字符串类似于c++中的String,但是在表示上Python有所不同。在Python中使用单引号'或者双引号"来表示字符串,双引号中的单引号则表示一个字符。Python使用与c++相同的转义符\来标识需要转义的字符,如\n,\t等。为了简化,Python中可使用r' '来表示' '内部的字符不转义,使用''' '''表示多行内容,在''' '''内部回车将使字符串换行。

在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言,例如:print('包含中文的str')。对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符。Python对bytes类型的数据用带b前缀的单引号或双引号表示:x=b'abc'。以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如:'ABC'.encode('ascii')'中文'.encode('utf-8'),通过decode()方法则可以将bytes转换为str。

在Python中,采用的格式化方式和c++是一致的,用%实现,如%d,%s,%f,%x等。

4.空值(None)

空值表示一个空的对象,用None表示,None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

5.布尔值(Boolean)

Python中的布尔值类似于c++中的bool,不过Python使用关键字TrueFalse来表示布尔值的值,小写的true和false会被解释为变量。在Python中,None、任何数值类型中的0、空字符串“”、空元组()、空列表[]、空字典{}都被当作False,还有自定义类型,如果实现了__nonzero__()__len__()方法且方法返回0或False,则其实例也被当作False,其他对象均为True。布尔值可使用andornot运算,分别表示与运算、或运算和非运算。

6.列表(List)

list类似于c++中的数组/vector,用于顺序存储结构,Python中使用符号[]表示列表,中间的元素可以是任何类型,用逗号分隔。list提供了一些内置函数,如:append()、insert()、pop()等,用法类似于c++中的vector。

7.元组(Tuple)

元组是和列表相似的数据结构,但它一旦初始化就不能更改,速度比list快,同时tuple不提供动态内存管理的功能,需理解以下规则:

tuple可以用下标返回一个元素或子tuple;

表示只含有一个元素的tuple的方法是:(d,),后面有个逗号,用来和单独的变量相区分。

8.字典(Dict)

dict全称dictionary,类似于c++中的map,使用键-值(key-value)存储,具有极快的查找速度。字典是一种无序存储结构,包括关键字(key)和关键字对应的值(value),Python中字典的格式为:dict = {key: value}。关键字为不可变类型,如字符串、整数、浮点数、只包含不可变对象的元组,列表等不可作为关键字。如果列表中存在关键字对,可以用dict()直接构造字典。字典中的key不能重复,一个key只能对应一个value,多次对一个key放入value,后面的值会把前面的值覆盖。

9.集合(Set)

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。集合是无序的,不重复的元素集,类似数学中的集合,可进行逻辑运算和算术运算,如求交集、并集等。要创建一个set,需要提供一个list作为输入集合,如:s = set([1, 2, 3])

  • Python中的可变对象与不可变对象

不可变对象:该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。

可变对象:该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变

Python中,数值类型(整数int、浮点数float)、字符串str、元组tuple是不可变类型;列表list、字典dict、集合set是可变类型。

使用函数id()可获取对象的内存地址,对于不可变对象,对象的值发生改变时对象的id随之发生改变;对于可变对象,对象的值发生改变时对象的id不会改变。