概述
在Python中,一切皆为对象!数据类型也不例外。
Python中所有数据类型、数据结构都是类,每个变量都是类的实例。
没有基础数据类型的概念,但标准库中拥有一个小的内建类型集合,这类“单值”类型为了方便有时被称为标量类型。
Python有6种数据类型:数字、字符串、元组、列表、集合、字典。(布尔类型是int的子类)
我们分两大部分来介绍,一部分,是基础类型,或者说标量类型,主要是数字和字符串;另一部分,是结构类型,包括:列表、元组、集合、字典。
一、标量类型
类型 | 描述 |
---|---|
None | Python的‘null’,只存在一个实例 |
str | 字符串类型,包含Unicode(UTF-8)字符串 |
bytes | 原生ASCII字节(或者Unicode编码字节) |
float | 双精度64位浮点数值(请注意,没有独立的double类型) |
bool | True或False |
int | 任意精度整数 |
标准库中含有datetime模块,也会在这个部分单独介绍。
1.数值类型
基础数据类型就int和float。
Python3不再区分整数和长整数,int可以储存任意大小数字。每一个浮点数都是双精度64位数值。
f = 7.234
f = 6.78e-5
2.字符串
普通字符串:’’ 或 “”
原始字符串:在普通字符串前加r。
长字符串(包含换行、缩进等):‘‘‘ ’’’或“““”””
**Python的字符串是不可以修改的。
>>> a = ‘this is a string’
>>> a[10] = ‘f’
TypeError
3.字节与Unicode
Bytes用于更好的兼容处理ASCII和非ASCII文本。我们可以使用encode方法将Unicode字符串转换为UTF-8字节:
>>> str_utf8 = str.encode(‘utf-8’)
>>> str_utf8
>>>b’str’
>>>type(str_utf8)
Bytes
也可以定义byte字符串:
Str = b’str’
4.布尔型
bool是int的子类,只有两个值:True, False
5.None
None是Python的null值类型。如果一个函数没有显示的返回值,则它隐式地返回None。也可以作为函数参数的默认值。
从技术角度,None不仅是关键字,还是NoneType类型的唯一实例。
>>>type(None)
NoneType
6.类型转换
str、bool、int、float既是数据类型,也是数据转换的函数。
>>> s = '3.1415'
>>> type(float(s))
<class 'float'>
隐式类型转换:
操作数1 | 操作数2 | 隐式转换类型 |
---|---|---|
bool | int | int |
bool,int | float | float |
7.日期和时间
Python中内建的datetime模块,提供了datetime、date和time类型。
>>> from datetime import datetime,date,time
>>> dt = datetime(2019,10,31,20,20,10)
>>> dt.day
31
二、结构类型
Python的数据结构简单但强大。精通这些数据结构是成为优秀Python编程者的必要条件。常用数据结构有:元组、列表、集合、字典。
1.元组tuple
元组是一种固定长度、不可变的对象序列。
创建:(,) 或 tuple函数
*小括弧也可以省略
>>> tup = 4,5,6
>>> tup
(4, 5, 6)
可以通过[序号]访问,索引从0开始。元组一旦创建,各个位置上的对象是无法更换的,但如果元组中存储的对象是可以修改的。
>>> tup = tuple(['foo',[1,2],True])
>>> tup[1].append(3)
>>> tup
('foo', [1, 2, 3], True)
- 号可以连接元组生成新元组,将元组乘以整数生成多份拷贝的元组。
>>> ('a', 'b') * 3
('a', 'b', 'a', 'b', 'a', 'b')
元组拆包
>>> tup = (4, 5, 6)
>>> a, b, c = tup
>>> tup = 4, 5, (6, 7)
>>> a, b, (c, d) = tup
变量交换值的表达
>>> a, b = 1, 2
>>> b, a = a, b
遍历
>>> seq = ((1, 2, 3), (4, 5, 6), (7, 8, 9))
>>> for a, b, c in seq:
... print('{0},{1},{2}'.format(a, b, c))
...
1,2,3
4,5,6
7,8,9
高级拆包
*rest 或 *_
>>> values = 1, 2, 3, 4, 5
>>> a, b, *rest = values
>>> c, d, *_ = values
元组的方法
由于元组内容和长度都是无法改变的,它的方法很少。一个常用的方法是count,用于计算某个值在元组中出现的次数。
>>> a = 1, 2, 3, 2, 4, 2, 5
>>> a.count(2)
3
2.列表list
列表的长度可变,内容也可以修改。
创建:[,] 或 list函数
>>> list = ['a', 'b', 'c']
>>> list[1] = 'B'
>>> list
['a', 'B', 'c']
list函数常用于将迭代器转化为列表:
>>> list( range(10) )
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
增加和移除元素:方法append, insert, pop, remove
检查:in, not in
连接和联合:+ 和 extend
- +操作生成新对象,需复制原来对象;extend是方法,在一个对象做扩展操作。
排序:方法sort,在原对象上操作。
切片:同元组,[start:stop:step]例如:
>>> seq = [1,2,3,4,5]
>>> seq[::-1]
[5, 4, 3, 2, 1]
3.字典dict
它更常用的名字是哈希表或关联数组,拥有灵活尺寸键值对集合,其中键和值都是Python对象。
创建:{:,} 或 dict函数
>>> d1 = {'a':'apple', 'b':[1,2,3]}
>>> d1
{'a': 'apple', 'b': [1, 2, 3]}
>>> d1['c'] = (2,)
>>> d1[7] = 'banana'
>>> d1
{'a': 'apple', 'b': [1, 2, 3], 'c': (2,), 7: 'banana'}
>>> 'b' in d1
True
>>> d1['c'] = 2
>>> d1
{'a': 'apple', 'b': [1, 2, 3], 'c': 2, 7: 'banana'}
键与值:
>>> d1.keys()
dict_keys(['a', 'b', 'c', 7])
>>> d1.values()
dict_values(['apple', [1, 2, 3], 2, 'banana'])
>>> list(d1.keys())
['a', 'b', 'c', 7]
有效的字典键类型
尽管字典的值可以是任何Python对象,但键必须是不可变对象,比如标量类型(整数、浮点、字符串)或元组(且元组内对象也必须是不可变对象)。这里就用到一个术语叫作哈希化,通过hash函数可以检查一个对象是否可以哈希化(检查是否可以用做字典的键)。
>>> hash('string')
-4418186674076014569
>>> hash((1,2,(3,4)))
-2725224101759650258
>>> hash((1,2,[3,4]))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
4.集合set
集合是一种无序且元素唯一的容器。你可以认为集合像只有键没有值的字典。
创建:{,} 或 set函数
- 集合的元素就像字典的键,必须是不可变的。如果需要包含列表型元素,必须先转换为元组。
觉得不错点个赞呦:)