[python学习手册-笔记]002.python核心数据类型

python核心数据类型

本系列文章是我个人学习python学习手册(第五版)》的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展。

非商业用途转载请注明作者和出处;商业用途请联系本人(gaoyang1019@hotmail.com)获取许可。

先来解决一个书上没搞懂的东西,字面量

百度百科给出的字面量的解释:"在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)。"

我表示没看懂,然后又查了一下.所谓字面量,就是那些赋值等号后面的数字啊字符串啊等等. 所以给出一个定性的解释吧.

var = 10 #这个"10"就是字面量
python的内置对象 对象类型 字面量/构造示例
数字   1234, 3.1415  
字符串   "hello" b'a\x01c'  
列表   [1,2,"word"], list(range(10))  
字典   {"food":"tomato","price":6.66}, dict(hours=10)  
元组   (1,2,"brady"),tuple('spam')  
文件   open("egg.txt")  
集合   set("abc"),{'a','b','c'}  
其他核心类型   类型,None,布尔型  
程序单元类型   函数,模块,类  
Python实现相关类型   已编译代码,调用栈跟踪  
数字类型

Python中的数字类型,除了支持常见的整数和浮点数之外,还有有虚部的附属,固定精度的十进制数字,带分子和分母的有理数等等. 支持常见的算数运算.

字符串

字符串是通过""或者''括起来的任意文本.在python中单引号和双引号的作用相同.

首先要明白字符串的两个特性:

python中的字符串是一个序列,也就是说它是遵循可迭代协议的

字符串是一个不可改变的量(这个理解起来有点困难,稍后会说,先承认这一特性)

字符串序列的操作 通过len()方法计算长度 In [2]: S = "spam"
In [3]: len(S)
Out[3]: 4
索引和切片

字符串是一个序列,支持索引和for的遍历

在字符串的索引中,负数表示逆向的索引,也就是从后往前.也就是说S[-1]相当于S[len(S)-1]

In [4]: S[0]
Out[4]: 's'
In [5]: S[-1]
Out[5]: 'm'
In [6]: for s in S:
   ...:     print(s)
   ...:
s
p
a
m

字符串支持分片操作

In [7]: S='hello'
# 取第三位到第五位之间的子串
In [8]: S[2:4]
Out[8]: 'll'
# 从第三位取到结尾
In [9]: S[2:]
Out[9]: 'llo'
# 取前三位
In [10]: S[:3]
Out[10]: 'hel'
# 从开始截取到倒数第二位之前
In [11]: S[:-2]
Out[11]: 'hel'

注意,分片操作的时候,X[I:J]表示的是从X[I]开始,到X[J]结束,但是不包括X[J]

字符串的拼接和重复

字符串支持通过+ 进行连接. 也可以通过*进行重复.

但是注意,这不代表字符串是可以改变的. 比如以下代码3-4行中,S+'xyz'.

这并不是改变了原有字符串S,而是开辟新的内存空间,将原有字符串S和'xyz'进行连接,生成一个新的量.

In [12]: S = "spam"

In [13]: S+'xyz'
Out[13]: 'spamxyz'

In [14]: S*3
Out[14]: 'spamspamspam'

这里,对于操作符+对于不同的类型而言有着不同的作用. 比如在数字类型中表示算数运算中的加法,在字符串中表示字符串连接. 这一特性就是传说中的多态,也称之为运算符重载. 这是Python中的一个极其重要的设计思路.

不可变性

字符串在Python中是一个不可变的字面量. 在python核心类型中,字符串,数字,元组都是不可变的. 而列表,字典,集合是可变的.

当然,通过前面的学习,某些操作,仿佛可以改变字符串. 但是这里要说的是,这种所谓的"改变"字符串,实际上是生成新的字面量,而不是改变原有字面量.

特性类型的方法(内置方法)

Python对于不同的类型,内置了一些便捷的方法可以使用. 也就是我们所谓的内置方法. 相关的内置方法可以在python官网的文档进行查询.这也是后面我们要学习内容的一部分.

In [15]: S = "Spam"
# 字符串替换
In [17]: S.replace('pa','xz')
Out[17]: 'Sxzm'
    
In [18]: line = "aaa,bbb,ccc"
# 字符串分割
In [19]: line.split(',')
Out[19]: ['aaa''bbb''ccc']

在python中,我们可以通过dir()方法查看在其作用域内,该类型所支持的属性和方法.

In [20]: dir(S)
Out[20]:['__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']
转义字符和unicode字符串

python与其他语言一样,支持'\'的转义字符. 比如常见的\n和\t

另外python原生支持unicode字符串. (关于unicode字符串,后续会有相关文章介绍)

列表

列表是类似C语言中数组的一种东西. 但是相比C语言的数组,python的列表更加灵活:

python的列表不局限其内的数据类型. 同一个列表中可以存放不同类型的数据

python的列表是可变长的.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwsfxj.html