由于本专栏的文章偏向于爬虫,所以对于python的介绍不可能面面俱到,在这里只讲重点。
如果大家觉得有没讲到的地方,欢迎补充~
文章目录
1 python变量类型及其详解
变量是每一门编程语言必不可少的,相较于C语言或者Java,python的变量定义比较简单,不需要在变量名前面事先声明变量的类型,只需要写出 变量名=变量值 即可,python解释器会自动识别并将变量名设定为该变量类型。
每一门语言中都有不同类型的变量,python也不例外,提供了6种数据类型,分别是数字(Number)、字符串(String)、列表(List)、元组(Tuple)、集合(Set)、字典(Dictionary),下面来详细的介绍一下:
1.1 数字
它支持4种类型,分别是整数、浮点数、复数、布尔类型
- 整数的定义非常简单,相当于C语言的int类型,定义方法如下:
a = 10 # 定义了一个整型变量a,其值为10
- 浮点数也就是小数,但是与C或者Java不一样,python不需要事先说明是长整形还是短整型,定义方法如下
b = 3.1415926
- 复数用的比较少,它分为实部和虚部,在python中,实部用数字表示,虚部用数字+j来表示,定义方法如下:
c = 3+4j # 定义了一个复数c,实部为3,虚部为4
- 布尔类型用来判断真假,只有True、False两个取值,定义方法如下:
d = True # 定义了一个布尔类型的变量d,取值为“真”
1.2 序列
1.2.1 字符串
字符串在python中是比较方便定义和使用的,它是描述文本的一种数据类型,可以由任意数量的字符组成。其定义和使用需要遵循以下规则:
- 在python的字符串中,可以使用单引号或双引号来定义。例如:
str1 = 'I am a student.'
str2 = "I am a student too."
- 如果一个字符串包含一个单引号,应该使用双引号来定义,例如:
str3 = "It's a big city!"
- 当一个字符串包含双引号时,要使用单引号来定义,例如:
str4 = 'When I was doing homework, "I love you!", she said.'
- 反斜杠(\)在python字符串中表示“转义字符”,例如:
str5 = 'It\'s a big city!' # 输出It's a big city!
- 对于转义字符,也可以通过在第一个引号前添加字母
r
来使用原始字符串,例如:
str6 = r'D:\nBaiduNetdiskDownload' # 输出D:\nBaiduNetdiskDownload
- 多行字符串,也可以作为多行注释,使用三对单引号来创建
'''
这是一个多行字符串
这是一个多行字符串
'''
1.2.2 列表
其实,列表、元组、集合、字典,都是python的数据容器,下面来介绍其中之一——列表(List)
列表相当于C语言中的数组,是基于链表这个数据结构实现的,但是比它的定义要简单,而且python还提供了对列表对象的各种操作方法。python列表规范如下:
- 列表内的每一个数据,称之为元素
- 以 [] 作为标识
- 列表内每一个元素之间用, 逗号隔开
- 一个列表中,可定义单个、多个或者嵌套类型的数据
创建列表的方法也有很多,例如:
- 直接在方括号内放入元素定义列表
list1 = [1, 2, 3, 4]
list2 = ['IT', 123, True]
list3 = [[1, 2, 3], [4, 5, 6]]
list4 = [] # 也可直接定义空链表
列表作为容器的一种,当然在应用方面有较多的需要,比如元素的选取方式,决定了代码的书写效率。所以python提供了多种多样的访问方式,后面的元组、集合、字典也不例外。
- 首先,和C、Java一样,python当然也可以通过下标来访问,在这里就不多说了。其次,列表等容器在for循环中运用的比较广泛,使用方法如下:
list5 = [1, 2, 3, 4, 5, 6]
for num in list5:
print(num)
1.2.3 元组
与列表不同,元组一经定义不可修改,但元组同列表一样,都是可以封装多个、不同类型的元素在内。所以,当我们需要在程序内封装数据,又不希望封装的数据被篡改,那么元组就非常合适了。
定义元组需用小括号,且使用逗号隔开各个数据,同时,数据可以是不同的数据类型。
- 创建元组的方式也和列表类似:
t1 = (1, 2, 3, 4)
t2 = ('IT', 123, True)
t3 = ((1, 2, 3), (4, 5, 6))
python也对于元组提供了多个方法来实现相关的操作,比如index()用于查找某个数据,如果数据存在返回对应的下标,否则报错;count()用于统计某个数据在当前元组出现的次数;len()用于统计元组内的元素个数等。
1.2.4 序列的切片操作
首先,什么是序列?
序列是指内容连续、有序,可使用下标索引的一类数据容器。
列表、元组、字符串,均可以可以视为序列。
什么是切片呢?
切片是指从一个序列中,取出一个子序列
在python中,切片使用的语法是:序列[起始下标:结束下标:步长],表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列。
切片操作需要注意的是:
- 起始下标表示从何处开始,可以留空,留空视作从头开始
- 结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾
- 步长表示,依次取元素的间隔
对于步长,有很多的编程技巧:
- 步长1表示,一个个取元素
- 步长2表示,每次跳过1个元素取
- 步长N表示,每次跳过N-1个元素取
- 步长为负数表示反向取(注意,起始下标和结束下标也要反向标记)
序列切片操作的演示(正向操作):
my_list = [1, 2, 3, 4, 5]
new_list = my_list[1:4] # 下标1开始,下标4(不含)结束,步长1
print(new_list) # 结果:[2, 3, 4]
my_tuple = (1, 2, 3, 4, 5)
new_tuple = my_tuple[:] # 从头开始,到最后结束,步长1
print(new_tuple) # 结果:(1, 2, 3, 4, 5)
my_list = [1, 2, 3, 4, 5]
new_list = my_list[::2] # 从头开始,到最后结束,步长2
print(new_list) # 结果:[1, 3, 5]
my_str = "12345"
new_str = my_str[:4:2] # 从头开始,到下标4(不含)结束,步长2
print(new_str) # 结果:"13"
序列切片操作的演示(反向操作):
my_str = "12345"
new_str = my_str[::-1] # 从头(最后)开始,到尾结束,步长-1(倒序)
print(new_str) # 结果:"54321"
my_list = [1, 2, 3, 4, 5]
new_list = my_list[3:1:-1] # 从下标3开始,到下标1(不含)结束,步长-1(倒序)
print(new_list) # 结果:[4, 3]
my_tuple = (1, 2, 3, 4, 5)
new_tuple = my_tuple[:1:-2] # 从头(最后)开始,到下标1(不含)结束,步长-2(倒序)
print(new_tuple) # 结果:(5, 3)
1.3 集合
与上面三个类似,集合也是python提供的一个数据容器,但是它有着特殊的功能,就是去重操作。无论是列表、元组还是字符串,都允许相同元素重复出现,但是对于集合,当要插入的元素在里面已经出现时,就不能重复插入了。
集合可以使用大括号 { } 或者 set() 函数创建
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
- 去重功能的展示:
s1 = {1, 2, 3, 4, 4, 3, 2, 1}
print(s1) # {1, 2, 3, 4}
- 集合存储元素是无序的:
a = set('abcdefg')
b = set('abc')
print(a) # {'f', 'd', 'e', 'b', 'g', 'c', 'a'}
print(b) # {'b', 'c', 'a'}
- 集合之间可以进行一些集合操作,例如交并差补
print(a - b) # {'d', 'g', 'f', 'e'}
print(a ^ b) # {'e', 'f', 'd', 'g'}
print(a & b) # {'b', 'c', 'a'}
print(a | b) # {'b', 'e', 'f', 'd', 'g', 'c', 'a'}
1.4 字典
在爬虫操作中,很多相应得到的响应体的部分都由字典组成,所以它在爬虫的开发中尤为重要。同时,它还可以与json对象相互转换,后面的文章会做专门的介绍。
字典与集合一样,都是用{}来表示,但是不同的是字典每个元素有两个值,中间用冒号隔开,前面的叫做key,后面的叫做value。语法如下:
- 使用{ }存储原始,每一个元素是一个键值对
- 每一个键值对包含Key和Value(用冒号分隔)
- 键值对之间使用逗号分隔
- Key和Value可以是任意类型的数据(key不可为字典)
- Key不可重复,重复会对原有数据覆盖
字典的定义可以使用以下形式:
dict = {"nane": "张三", "age": 18, "sex": "男"}
dict1 = {} # 定义了一个空字典
同时,字典还可以嵌套使用,但key不可以为字典类型,例如:
stuScore = {"张三" : {"语文" : 89, "数学" : 78, "英语" : 77}, "李四" : {"语文" : 69, "数学" : 94, "英语" : 79}}
当需要获取字典中的内容时,可以利用key中的值来取value,例如:
print(stuScore["张三"]) # {'语文': 89, '数学': 78, '英语': 77}
除此之外,还可以对字典进行增删改操作:
dict = {"nane": "张三", "age": 18, "sex": "男"} # 定义了一个空字典
dict["score"] = 100 # 增加元素
del dict["name"] # 删除元素
dict["name"]="老六" # 修改元素
对于字典,python提供的操作有:
- len(字典):用于返回字典中键值对个数
- 字典.pop(Key):用于取出Key对应的Value并在字典内删除此Key的键值对
- 字典.clear():清空字典
- 字典.keys():获取字典的全部Key,可用于for循环遍历字典
其中的keys,values,items方法,可用于字典的遍历:
# 1.使用keys
for i in dict.keys():
print(i)
# 2.使用values
for i in dict.values():
print(i)
# 3.使用items
for i in dict.items():
print(i)
# 4.可使用items获取key和value
for key,value in dict.items():
print(key,value)
1.5 数据容器的比较
列表 | 元组 | 字符串 | 集合 | 字典 | |
---|---|---|---|---|---|
元素类型 | 任意 | 任意 | 仅字符 | 任意 | Key除字典外任意, Value任意 |
下标索引 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
重复元素 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
可修改性 | 支持 | 不支持 | 不支持 | 支持 | 支持 |
数据有序 | 是 | 是 | 是 | 否 | 否 |
使用场景 | 可修改、可重复的一批数据记录 | 不可修改、可重复的一批数据记录 | 一串字符的记录 | 不可重复的数据记录 | 以Key检索Value的数据记录 |
2 python变量命名规范
首先,变量的命名规则与C、Java等语言一样:
- 只能由字母、数字、下划线组成
- 不能是数字开头,比如1s就是错误的变量名
- 不能是python内置关键字,比如
for
、while
等 - 严格区分大小写,比如
Stu
和stu
就不是一个变量
其次,变量的命名习惯一般都用小驼峰命名法,即除了第一个单词首字母小写,其余单词首字母大写,比如pageRank
最后,还要注意的一点是:变量的命名要见文知义,比如说姓名这个变量名就要写成name
或者my_name
等,如果写成a, b, c
这种的就会影响项目的开发。