要点概括:
1.变量的赋值
在 Python中,对于每个变量在使用前不需要声明,但需要用=
赋值。同时,也可对多个变量进行赋值,如下所示:
1
2
3
4
|
var1 = 10
var2 = var3 = 10.1 # 创建一个对象,值为10.1,两个变量都指向同一内存位置
var4, var5, var6 = 5, 6, 'hello' # 两个整型对象5和6分配给var4和var5,字符串对象hello分配给var6
print(var1, var2, var3, var4, var5, var6)
|
输出结果如下:
2.标准数据类型
在 Python3 中,有 6 种标准的数据类型:
- Number(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Set(集合)
- Dictionary(字典)
根据数据类型是否可变,可将上面的数据类型分为两类:
- 不可变数据:Number(数字)、String(字符串)、Tuple(元组)
- 可变数据:List(列表)、Set(集合)、Dictionary(字典)
2.1 Number(数字)
上一篇文章中有说到,数字类型包括int
、float
、bool
和complex
四种。我们可以通过type()
函数来查看变量所指的对象类型,如下所示:
1
2
3
4
5
|
a, b, c, d = 1, 3.14, True, 1 + 2j
print(type(a))
print(type(b))
print(type(c))
print(type(d))
|
输出结果如下:
1
2
3
4
|
<class 'int'>
<class 'float'>
<class 'bool'>
<class 'complex'>
|
可见,变量a
所指的对象类型为int
型,变量b
所指的对象类型为float
型……所以说,变量的类型是由赋予它的值来确定的。
当然,也可以用isinstance(object, classinfo)
函数来判断一个对象是否是一个已知的类型。其中object
表示实例对象,classinfo
表示直接或间接类名、基本类型或者由它们组成的元组,如果对象的类型(object)与参数二的类型(classinfo)相同则返回True
,否则返回 False
,如下所示:
1
2
3
|
a = 100
result = isinstance(a, int)
print(result)
|
输出结果如下:
type()
与isinstance()
的区别在于:
type()
不会认为子类是一种父类类型,不考虑继承关系,它用于求一个未知数据类型对象。
isinstance()
会认为子类是一种父类类型,考虑继承关系,它用于判断一个对象是否是已知类型。
除此之外,对于日常的数值运算,Python在计算起来也十分的方便,如下所示:
1
2
3
4
5
6
7
|
print('1 + 2 =', 1 + 2) # 加法
print('2 - 1 =', 2 - 1) # 减法
print('1 * 2 =', 1 * 2) # 乘法
print('13 / 5 =', 13 / 5) # 除法,得到一个浮点数
print('13 // 5 =', 13 // 5) # 除法,得到一个整数
print('13 % 5 =', 13 % 5) # 取余
print('2 ** 3 =', 2 ** 3) # 2的3次方
|
输出结果如下:
1
2
3
4
5
6
7
|
1 + 2 = 3
2 - 1 = 1
1 * 2 = 2
13 / 5 = 2.6
13 // 5 = 2
13 % 5 = 3
2 ** 3 = 6
|
此外:
- 在混合计算时,Python 会把整型转换成浮点数。
- 对于复数,如
a + bj
,可用complex(a, b)
来表示,其中实部 a 和虚部 b 都是浮点型。
对于数字类型的转换,可以使用下面这些函数将参数转换为对应的数字类型,如下所示:
int(x)
函数,将 x 转换为一个整数。
float(x)
函数,将 x 转换到一个浮点数。
complex(x)
函数,将 x 转换到一个复数,实数部分为 x,虚数部分为 0。
complex(x, y)
函数,将x
和y
转换到一个复数,实数部分为x
,虚数部分为y
。x
和y
是数字表达式。
另外,还有数学函数、随机数函数、三角函数以及数学常量等。
2.2 String(字符串)
对于字符串的解释在上一篇博文提到过,这里不再进行多余赘述,反而要注意一点的是:对于isinstance(object, classinfo)
中的classinfo
来说,其基本类型如下所示:
1
|
int,float,bool,complex,str(字符串),list,dict(字典),set,tuple
|
其中,字符串是str
而不是string
,字典也是简写成dict
,如下所示:
1
2
3
4
|
var = 123
isinstance(var, int) #输出True
isinstance(var, str) #输出False
isinstance(var, string) #报错
|
2.3 List(列表)
列表是 Python 常用的数据类型,在列表中的元素类型可以不同,支持数字,字符串,或者再包含列表,即嵌套。
列表的元素被放在一对中括号内,多个元素用逗号分隔开。它和字符串一样,也可以被索引和截取,左侧以索引0
为开始,右侧以索引-1
为开始,列表被截取后返回一个包含所需元素的新列表,如下所示:
1
2
3
4
5
6
7
8
9
10
|
list1 = [0, 1, 2, 'a', 'abc']
list2 = ['def', 3, 4]
print(list1) # 输出完整的列表
print(list1[:]) # 输出完整的列表
print(list1[0]) # 输出列表中第一个元素
print(list1[-1]) # 输出列表中最后一个元素
print(list1[1:3]) # 输出列表中第二个到第三个元素,因为有冒号,所以不包括右侧
print(list1[:-1]) # 输出列表中除了最后一个元素以外的所有元素,同样的,因为有冒号,所以不包括右侧
print(list1 + list2) # 将列表进行连接
print(list1[1::2]) # 注意这个写法,它表示[索引:索引:步长],即每隔2个元素取一次元素
|
输出结果如下:
1
2
3
4
5
6
7
8
|
[0, 1, 2, 'a', 'abc']
[0, 1, 2, 'a', 'abc']
0
abc
[1, 2]
[0, 1, 2, 'a']
[0, 1, 2, 'a', 'abc', 'def', 3, 4]
[1, 'a']
|
前面说到列表是可变的数据类型,可以改变列表中的某个元素或全部元素,如下所示:
1
2
3
4
|
list = [1, 2, 3, 4, 5]
list[0] = 'number' # 这里将数字1改为了number
list[2:4] = [100, 200] # 这里进行了切片操作
print(list)
|
输出结果如下:
1
|
['number', 2, 100, 200, 5]
|
对于列表的删除
或添加
操作,可以用pop()
和append()
函数实现,如下所示:
1
2
3
4
5
|
list = [1, 2, 3, 4, 5]
list.pop() # 删除了数字5
print(list)
list.append('banana') # 添加了字符串banana
print(list)
|
输出结果如下:
1
2
|
[1, 2, 3, 4]
[1, 2, 3, 4, 'banana']
|
此外还有关于列表的一些函数和方法,列表的函数如下图:
列表的方法如下图:
2.4 Tuple(元组)
元组与列表类似,但元组中的元素不能修改。其元素放在小括号()
里面,元素之间也用逗号隔开,如下所示:
1
2
3
4
5
6
7
8
|
tuple1 = (1, 2, 'abc', 3.14, 'def')
tuple2 = (4, 5, 'ghi')
print(tuple1) # 输出tuple1元组全部元素
print(tuple1[0]) # 输出tuple1元组第一个元素
print(tuple1[1:3]) # 输出tuple1元组第二个到第三个元素,因为有冒号,所以不包括右侧右侧
print(tuple1[2:]) # 输出tuple1元组从第三个开始的所有元素
print(tuple1 * 2) # 输出两遍tuple1元组
print(tuple1 + tuple2) # 连接元组
|
输出结果如下:
1
2
3
4
5
6
|
(1, 2, 'abc', 3.14, 'def')
1
(2, 'abc')
('abc', 3.14, 'def')
(1, 2, 'abc', 3.14, 'def', 1, 2, 'abc', 3.14, 'def')
(1, 2, 'abc', 3.14, 'def', 4, 5, 'ghi')
|
另:虽然元组的元素不可改变,但它可以包含可变的对象,如 list。
构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则,如下所示:
1
2
|
tup1 = () # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号
|
因为元组中的元素不可修改,但可以用del
语句删除整个元组,如下所示:
1
2
3
4
|
tup1 = (1, 2, 3, 4, 5)
print(tup1)
del tup1
print(tup1)
|
输出结果如下:
1
2
3
4
|
(1, 2, 3, 4, 5)
Traceback (most recent call last): # 由于元组被删除,所以这三行出现错误提示。
print(tup1)
NameError: name 'tup1' is not defined
|
元组也有一些内置函数,如下图:
2.5 Set(集合)
集合是一个无序且元素不重复的序列。基本功能是进行成员关系测试和删除重复元素。
可以使用一对花括号{}
或者set()
函数创建集合。但创建一个空集合必须用set()
而不是{ }
,因为{ }
是用来创建一个空字典。具体如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
set1 = {1, 2, 2, 3, 'a', 'a', 'b', 'c'}
print(set1)
# 进行成员测试
if 'a' in set1:
print('a 在集合中')
else:
print('a 不在集合中')
# 进行集合运算
a = set('abracadabra')
b = set('alacazam')
print(a - b) # 差集,输出在a中,但不在b中的元素
print(a | b) # 并集
print(a & b) # 交集
print(a ^ b) # a和b不同时存在的元素
|
输出结果如下:
1
2
3
4
5
6
|
{1, 2, 3, 'a', 'c', 'b'} # 自动去除重复元素
a 在集合中
{'d', 'r', 'b'}
{'m', 'd', 'l', 'a', 'c', 'b', 'z', 'r'}
{'c', 'a'}
{'d', 'l', 'm', 'r', 'b', 'z'}
|
若要向集合中添加元素,可用add()
方法,此方法只可添加一个元素;若要添加多个元素,可用update()
方法;如下所示:
1
2
3
4
5
6
7
8
9
10
|
set1 = {1, 2, 'a'}
print(set1)
set1.add('Google')
print(set1)
set1.update('Hello') # 这种添加方式会将字符串拆分单个字符,然后再一个个添加到集合中,有重复的会忽略。
print(set1)
set1.update({100, 200}) # 添加字典类型
print(set1)
set1.update([300, 'Github']) # 添加列表类型
print(set1)
|
输出结果如下:
1
2
3
4
5
|
{1, 2, 'a'}
{'Google', 1, 2, 'a'}
{1, 2, 'e', 'H', 'a', 'l', 'Google', 'o'}
{1, 2, 100, 200, 'e', 'H', 'a', 'l', 'Google', 'o'}
{'Github', 1, 2, 100, 200, 'e', 300, 'H', 'a', 'l', 'Google', 'o'}
|
若要移除元素,可用remove()
、dicard()
或者pop()
方法,它们的区别在于:
remove()
只可删除一个元素,如果元素不存在,则会发生错误。
dicard()
也是只可删除一个元素,但如果元素不存在,则不会发生错误。
pop()
表示随机删除集合中的一个元素。
如下所示:
1
2
3
4
5
6
7
8
|
set1 = {1, 2, 3, 'a', 'b', 'c'}
print(set1)
set1.remove(1)
print(set1)
set1.discard(2)
print(set1)
set1.pop()
print(set1)
|
输出结果如下:
1
2
3
4
|
{1, 2, 3, 'a', 'b', 'c'}
{2, 3, 'a', 'b', 'c'}
{3, 'a', 'b', 'c'}
{'a', 'b', 'c'}
|
2.6 Dictionary(字典)
字典是可变且无序的对象集合,它是通过键
来存取的。
- 字典属于一种映射类型,用花括号
{}
表示;
- 它是一个
键:值
对的集合,即key:value
,每个键值对用逗号隔开;
- 在同一个字典中,
key
必须是唯一的,即不能重复;
key
必须使用不可变类型,如数字、字符串或元组,而不能用列表;
- 创建空字典用一对花括号
{}
。
具体如下所示:
1
2
3
4
5
|
dic1 = {'name': 'Carol', 'gender': 'male', 'age': 18}
print(dic1)
print(dic1['name'])
print(dic1.keys())
print(dic1.values())
|
输出结果如下:
1
2
3
4
|
{'name': 'Carol', 'gender': 'male', 'age': 18}
Carol
dict_keys(['name', 'gender', 'age'])
dict_values(['Carol', 'male', 18])
|
对于字典的修改,通过修改其键:值
即可实现,如下所示:
1
2
3
4
|
dic1 = {'name': 'Carol', 'gender': 'male', 'age': 18}
dic1['name'] = 'Jack' # 修改姓名
dic1['age'] = 23 # 修改年龄
print(dic1)
|
输出结果如下:
1
|
{'name': 'Jack', 'gender': 'male', 'age': 23}
|
对于字典的删除,也可用del
函数,而要清空字典的话,就用clear()
方法,如下所示:
1
2
3
4
5
6
|
dic1 = {'name': 'Carol', 'gender': 'male', 'age': 18}
print(dic1)
del dic1['name']
print(dic1)
dic1.clear()
print(dic1)
|
输出结果如下:
1
2
3
|
{'name': 'Carol', 'gender': 'male', 'age': 18} # 原字典
{'gender': 'male', 'age': 18} # 删除name后的字典
{} # 清空后的字典
|
此外还有关于字典的一些函数和方法。
字典的函数如下图:
字典的方法如下图:
3.数据类型转换
在 Python 中内置了可以用于数据类型之间进行转换的函数,这些函数返回一个新的对象,表示转换的值,如下图: