1. 6种基本数据类型
在Python中有6种基本的数据类型,分别是:
字符串
、数字
、列表
、元祖
、字典
、集合
2. 可变数据和不可变数据
按照数据是否可变,可以分为可变数据
和不可变数据
,所谓可变数据,是指数据的展示形式、内容可变,但仍是同一个数据,比如:集合{'Alex', 21, 'shanshan', 20}
和{21, 'Alex', 'shanshan', 20}
为同一个集合。列表['Alex', 21, 'shanshan']
,增加一个元素20
后变成['Alex', 21, 'shanshan', '20']
。虽然列表中的元素增加了,但是列表仍然为同一个列表。
6种基本数据类型按是否为可变数据可如下分类:
分类标准 | 数据类型 |
---|---|
不可变数据 | String(字符串)、Number(数字)、Tuple(元组) |
可变数据 | List(列表)、Dictionary(字典)、Sets(集合) |
在后期学习时,有些数据要求是不可变数据类型。比如字典的键(Keys),要求是不可变数据类型。
3. 字符串
在Python中,用一对'
、"
或者'''
括起来的内容即为字符串。
其中'
和"
作用相同,用于单行字符串;'''
用于多行字符串。在字符串中需要显示'
或"
时,可以用"
或'
在最外层将字符串括起来,也可以使用转义符\
转义。比如:
'
和"
作用一样:
string1 = 'I love Python.'
string2 = "I love Python."
print(string1)
print(string2)
输出结果:
在字符串中显示'
或者"
:
string1 = '我是“王老五”。'
string2 = "I'am a oldboy."
string3 = 'I\'am a oldboy.'
print(string1)
print(string2)
print(string3)
输出结果:
显示多行字符串:
string1 = '''
我是“王老五”。
I am an old boy.
'''
print(string1)
输出结果:
在写Python代码时,应该遵守
PEP 8代码编写风格
,每一行字符不宜过多,既不方便读,也不方便写。如果该行字符过多,可以用\
来在下一行延续你的代码。比如:
with open('/path/to/some/file/you/want/to/read') as file_1, \
open('/path/to/some/file/being/written', 'w') as file_2:
file_2.write(file_1.read())
4. 索引与切片
Python会对一些有序数据进行排序,比如字符串、列表、元祖。排序的方法有两种,一种是从左往右递增排序,起始序号为0;另一种是从右往左递减排序,起始序号为-1。
Python中的两种序号体系:
- 正向递增序号
- 反向递减序号
字符串、列表、元祖的索引和切片都是基于这两种序号体系进行。
4.1. 索引
索引的方法是在变量的后面用[]
将需要索引的内容的序号括起来。比如:
string1 = 'I love Python'
其索引序号如图所示。
如果要索引字母v
,方法如下:
# 用正向序号索引
string1[4]
# 用反向序号索引
string1[-9]
4.2. 切片
切片时,采用[M:N]
格式,表示被切片对象(如字符串)中从M到N(不包含N)的元素。其中M、N为字符串的索引序号,可以混合使用正向递增序号和反向递减序号,但是要确保切片是从左往右切。比如:切取字符串string
1的ve Pyt
部分
# 用正向索引切片
string1[4:10]
# 用反向索引切片
string1[-9:-3]
# 混合使用索引序号切片
string1[4:-3]
string1[-9:10]
5. 字符串运算
5.1. 字符串连接(+)
通过相加的形式可以将两个字符串链接在一起。比如:
string1 = 'abc'
string2 = 'def'
string3 = string1 + string2
print(string3)
输出结果为:'abcdef'
。如图所示。
5.2. 字符串重复(*)
利用相乘的形式,可以重复输出字符串。比如:
string1 = 'abc'
string2 = string1 * 3
输出结果为:'abcabcabc'
。如图所示。
6. 格式化字符串
格式化字符串的方法有两种,分别为:
- 使用字符串格式符
- 使用format()函数
6.1. 使用字符串格式符格式化
字符串格式化符号:
符号 | 描述 |
---|---|
%s | 格式化字符串 |
%d | 格式化整数 |
%f | 格式化浮点数,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 用科学计数法格式化浮点数 |
%u | 格式化无符号整形 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数 |
%g | %f和%e的简写 |
%G | %f和%E的简写 |
%p | 用十六进制数格式化变量的地址 |
以常用的%s
和%d
为例:
name = 'Alex'
old_year = 21
print('%s的年龄是:%d' % (name, old_year))
6.2. 使用format()函数格式化
name = 'Alex'
old_year = 21
print('{1:-^20}的年龄是:{0:}'.format( old_year, name))
上述代码中,{}
称为槽,在槽内可以指定字符串的格式控制信息,比如1:-^20
,槽的内部样式如下:
{<参数序号>:<格式控制标记>}
其中,格式控制标记用来控制参数显示时的格式,格式内容如下:
0 | : | 填充 | 对齐 | 宽度 | , | 精度 | 类型 |
---|---|---|---|---|---|---|---|
参数序号 | 引导符 | 用于填充的单个字符 | <左对齐(默认)^居中对齐>右对齐 | 槽的宽度 | 数字的千位分隔符 | 小数点精度或字符串最大输出长度 | 指定数据类型。整形:b,c,d,o,x,X ;浮点型:e,E,f,% |
使用时,可以省略参数序号,format()的参数默认使用位置参数。此时槽排列顺序和位置参数的排列顺序一一对应,比如第一个{}
默认应该对应的就是old_year
参数。但是因为在槽里面指定了参数序号,因此,该槽对应的是第二个参数,即name
。
或者可以向字典一样使用键值对映射。比如:
print('{name:-^20}的年龄是:{old_year:}'.format( old_year = 21, name = 'Alex'))
7. 变量命名
Python中的变量不需要声明,但是需要赋值(用赋值符号=
赋值),只有为变量赋值后,该变量才会被创建。另外,在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。比如:
string1 = 'I love Python'
num1 = 21
等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。
=
是赋值符号,用于给变量赋值;==
是判断符号,判断其左右两边的值是否相等。
7.1. Python语言33个保留字
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
from | import | as | if | elif |
else | for | in | is | not |
while | and | or | continue | break |
pass | def | return | try | except |
True | False | None | class | del |
with | global | finally | lambda | nonlocal |
raise | yield | assert |
不难发现,大部分都是Python导入模块语句、循环语句、条件语句等语法
7.2. 变量命名规范
- 变量命名时不能使用Python中的保留字
- 变量只能使用字母、数字、下划线命名
- 变量命名时大小写敏感,比如
name
和Name
不是同一个变量名 - 不能以数字开头
7.3. 变量命名习惯
- 驼峰体
- 下划线
7.3.1. 驼峰体
每个单词的首字母大写。比如:
AgeOfOldboy = 56
NumberOfStudents = 80
7.3.2. 下划线
使用下划线分隔每个单词,Python官方推荐使用下划线
方式命名。比如:
age_of_oldboy = 56
number_of_students = 80
推荐类名用
驼峰命名
, 函数和方法名用小写_和_下划线
。
变量命名时,要显得专业点需要注意以下几个问题:
- 避免变量名为中文、拼音
- 变量名过长
- 词不达意
变量命名建议使用英文单词命名,便于维护代码时见名思意。
在Python中没有一个专门的语法代表常量
,程序员约定俗成用变量名全部大写
代表常量。
8. 字符串内建函数
序号 | 方法 | 描述 |
---|---|---|
1 | len(string) | 返回字符串长度 |
2 | index(str, beg=0, end=len(string)) | 跟find()方法一样,只不过如果str不在字符串中会报一个异常. |
3 | rindex( str, beg=0, end=len(string)) | 类似于 index(),不过是从右边开始. |
4 | find(str, beg=0 end=len(string)) | 检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1 |
5 | rfind(str, beg=0,end=len(string)) | 类似于 find()函数,不过是从右边开始查找. |
6 | lstrip() | 截掉字符串左边的空格或指定字符。 |
7 | rstrip() | 删除字符串字符串末尾的空格. |
8 | strip([chars]) | 在字符串上执行 lstrip()和 rstrip() |
9 | split(str="", num=string.count(str)) | num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num 个子字符串 |
10 | splitlines([keepends]) | 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 |
11 | join(seq) | 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
12 | startswith(str, beg=0,end=len(string)) | 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。 |
13 | endswith(suffix, beg=0, end=len(string)) | 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False. |
14 | lower() | 转换字符串中所有大写字符为小写. |
15 | upper() | 转换字符串中的小写字母为大写 |
16 | title() | 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) |
17 | swapcase() | 将字符串中大写转换为小写,小写转换为大写 |
18 | replace(old, new [, max]) | 把 将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。 |
19 | max(str) | 返回字符串 str 中最大的字母。 |
20 | min(str) | 返回字符串 str 中最小的字母。 |
21 | center(width, fillchar) | 返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。 |
22 | isalpha() | 如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False。 |
23 | isdigit() | 如果字符串只包含数字则返回 True 否则返回 False。 |
24 | isnumeric() | 如果字符串中只包含数字字符,则返回 True,否则返回 False |
25 | islower() | 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False |
26 | isupper() | 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False |
27 | istitle() | 如果字符串是标题化的(见 title())则返回 True,否则返回 False |
28 | isspace() | 如果字符串中只包含空白,则返回 True,否则返回 False. |
- 由于本人使用的是Windows 10系统的电脑,所以笔记中提到的操作、设置都是在Windows系统下进行。
- 本人正在Python学习的路上努力,笔记中难免会有一些错误之处,还请各位老师多批评指正。