Python基础类型

任何编程语言都离不开对数据结构的处理,Python也不例外。数据结构是基础数据或者基础数据的组合。Python基础类型有:

  • Number 数字类型
  • String 字符串类型
  • Turple 元组类型
  • List 列表类型
  • Dictionary 字典类型

查看变量类型

Python语言中有专门的内置函数type来查看数据的类型,type可以直接应用在变量或者表达式上。

himalayas@ubuntu:~/work/python/notes$ python
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 1
>>> type(a)
<class 'int'>
>>> b = "abc"
>>> type(b)
<class 'str'>
>>> type(3 + 4)
<class 'int'>
>>> type("hello")
<class 'str'>
>>>

数字类型(Number)

Python基础数字类型包括常用的整型、浮点型等。像其它编程语言一样,支持加减乘除(+,-,*,/)等运算。

>>> 4 / 2
2.0
>>> 2 + 3
5
>>> 2 * 3
6
>>> 5 - 4
1
>>> 3.0 / 2
1.5

对于整数除法,Python 3之前的版本与C语言一样,返回整型,不能整除时向下取整;Python 3整数除法统一返回为浮点数,特别引入//运算符表示取整除法。

Python 2.7.13 |Anaconda custom (64-bit)| (default, Dec 20 2016, 23:09:15)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>> 4 / 2
2
>>> 3 / 2
1
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 4 / 2
2.0
>>> 3 / 2
1.5
>>> 3 // 2
1
>>> 4 // 2
2

同时Python中还引入**运算符表示幂运算。

>>> 2 ** 3
8

另外自Python 2.2后,Python中不在有long类型。 Python还支持复数类型及其运算。

>>> a = 3 + 2j
>>> type(a)
<class 'complex'>

字符串类型(String)

与数字类型一样,字符串类型也是几乎所有编程语言的基础类型。 Python中字符串用单引号和双引号都可以定义。另外也可以用三个双引号或者三个单引号定义多行的字符串。

>>> s1 = 'abc'
>>> s2 = "123"
>>> s3 = '''
... Hello,
... world!!
... '''
>>> s1
'abc'
>>> s2
'123'
>>> s3
'\nHello,\nworld!!\n'
>>>

Python全面支持国际码(unicode),国际码几乎包含了目前世界上所有通用语言中的字符。Python 3中对unicode的支持采与之前版本有较大的区别。

  • Python 3中unicode字符串与ASCII字符串都是str类型;新增加了bytes类型表示字节串;
  • Python 2中单字节字符(ASCII, LATIN字符)串与字节串都是str类型;unicode字符串有专有类型unicode;
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s1 = "Hello world!"
>>> type(s1)
<class 'str'>
>>> s2 = u"学习Python编程语言"
>>> type(s2)
<class 'str'>
>>> b1 = b'a\x01c'
>>> type(b1)
<class 'bytes'>
Python 2.7.14 (default, Sep 22 2017, 00:06:49)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> s1 = "Hello world!"
>>> type(s1)
<type 'str'>
>>> s2 = u"学习Python编程语言"
>>> type(s2)
<type 'unicode'>
>>> b1 = b'a\x01c'
>>> type(b1)
<type 'str'>

字符串类型还包含一些特有的方法方便使用,如find、replace等,可以查看相关文档。

序列操作

Python中所有按位置排序的数据集合都支持序列操作。序列操作有:按下标读数据、序列长度、子序列等。对于可变序列(mutable)还支持按下标写。

  • []加下标读写序列数据,写仅对可变序列有效。
  • len内置函数计算序列长度。
  • []加开始下标和结束下标返回子序列。
  • 下标读写操作都会检查下标是否越界,超过序列范围。

字符串支持序列操作,但属于不可变序列(immutable)

>>> s = '12345'
>>> s[0]
'1'
>>> s[-1]
'5'
>>> len(s)
5
>>> s[0:3]
'123'
>>> s[0] = '6'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> s[7]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

列表类型(List)

Python中的List是加强版的数组--长度可变且同一List中可以包含不同类型的元素。List也支持序列操作而且是可变序列类型。

>>> l = [1,2,'abc',9.9]
>>> l[0]
1
>>> l[-1]
9.9
>>> l[0:-1]
[1, 2, 'abc']
>>> l[0]=10
>>> l[0]
10

元组类型(Turple)

元组类型(Turple)可以当作是只读的列表类型。Turple也支持序列操作,它与String一样是不可变序列类型。

>>> x = (1, 'abc', 2)
>>> len(x)
3
>>> x[0]
1
>>> x[1]
'abc'
>>> y = x[:-1]
>>> y
(1, 'abc')

Turple类型的功能完全可以用List类型实现,Python提供这个类型更多是为了编程的便利性。例如在C/C++中,函数需要返回两个变量,通常做法是定义一个数据结构包含着两个变量,返回该数据结构;或者是直接返回一个变量,而另一个变量通过引用返回。在Python中,只需简单的用括号将两个变量组成Turple返回即可。

字典类型(Dictionary)

字典类型(Dictionary)List都是容器类型--可以包含任意的Python类型,不同的是字典类型通过键值(key)检索内容,而列表根据存储位置检索内容。虽然有部分操作字典的方法与序列类似,但是字典并不是一种序列类型。

>>> z = { 1 : 2, 2 : 4, 'a': 'aa', 'b': 'bb'}
>>> len(z)
4
>>> z[1]
2
>>> z['a']
'aa'

字典支持in操作符检查是否包含指定键值。

>>> d = {'a': 'aa', 'b': 'bb'}
>>> 'a' in d
True
>>> 'c' in d
False

小结

本文简要介绍了Python中的基本类型,除了数值类型外,字符串、列表、字典都含有类型专属的方法,这里没有一一介绍,可以查看相关文档。需要注意在字符串类型中对unicode的处理,Python 2.7与Python 3有很大的区别。