要点概括:

BasicGrammar-contents

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)

输出结果如下:

1
10 10.1 10.1 5 6 hello

2.标准数据类型

在 Python3 中,有 6 种标准的数据类型:

  • Number(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Set(集合)
  • Dictionary(字典)

根据数据类型是否可变,可将上面的数据类型分为两类:

  • 不可变数据:Number(数字)、String(字符串)、Tuple(元组)
  • 可变数据:List(列表)、Set(集合)、Dictionary(字典)

2.1 Number(数字)

上一篇文章中有说到,数字类型包括intfloatboolcomplex四种。我们可以通过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)

输出结果如下:

1
True

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)函数,将xy转换到一个复数,实数部分为x,虚数部分为yxy是数字表达式。

另外,还有数学函数、随机数函数、三角函数以及数学常量等。

2.2 String(字符串)

对于字符串的解释在上一篇博文提到过,这里不再进行多余赘述,反而要注意一点的是:对于isinstance(object, classinfo)中的classinfo来说,其基本类型如下所示:

1
intfloatboolcomplexstr(字符串)listdict(字典)settuple

其中,字符串是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']

此外还有关于列表的一些函数和方法,列表的函数如下图:

list_function

列表的方法如下图:

lsit_method

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

元组也有一些内置函数,如下图:

tuple_function

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后的字典
{}  # 清空后的字典

此外还有关于字典的一些函数和方法。

字典的函数如下图:

dict_function

字典的方法如下图:

dict_method

3.数据类型转换

在 Python 中内置了可以用于数据类型之间进行转换的函数,这些函数返回一个新的对象,表示转换的值,如下图:

DataTypeTransform