Python 基础(一)
🍦 Python由荷兰数学和计算机科学研究学会的Guido van Rossum于1990年代初设计,1991年发布,是跨平台解释型脚本语言。
1 语法
- 缩进
- 缩进指的是代码行开头的空格,便于阅读,非常重要。
- 使用缩进表示代码块时,如果跳过缩进,运行将会返回一个错误。
- 空格数量由程序员决定,最常见的是
Tab四个空格或者两个空格。 - 同个代码块中必须使用相同数量的空格缩进,否则返回一个错误。
1 | |
- 注释
- 单行注释:以
#开头。 - 多行注释:以
"""或'''开头,以"""或'''结尾,必须首尾成对。
- 单行注释:以
1 | |
2 变量
- 变量
- 存储数据值的容器,赋值时创建,Python没有用于声明变量的命令。
- 变量不需要以任何特定类型进行声明,甚至可以在设置后更改类型,通过强制转换更改。
- 使用函数
type()获取变量的数据类型,使用单引号' '或双引号" "声明字符串变量。
1 | |
2-1 变量名
- 变量名
- 命名规则
- 区分大小写(age、Age和AGE是不同的变量)。
- 必须以字母或下划线开头,不能以数字开头。
- 只能包含字母数字字符和下划线(Az、0-9和_)。
- 命名方法
- 蛇形命名法,每个单词都以下划线字符(_)分隔。
- 小驼峰命名法,除首单词字母小写,其余单词都以大写字母开头。
- 大驼峰命名法,又叫帕斯卡命名法,每个单词都以大写字母开头。
- 命名规则
1 | |
2-2 多值分配
- 多值分配
- 允许在一行中为多个变量赋值,也可在一行中为多个变量分配相同值。
- 如果有一组列表或者元组,允许将值提取到变量中,该方法称为拆包。
1 | |
2-3 输出变量
- 输出变量
- 使用函数
print()输出多个变量,逗号分隔,支持不同数据类型。 - 使用
+运算符输出多个变量,对于数字,该字符用于数学运算符。 - 如果尝试使用
+操作符组合字符串和数字,那么将TypeError报错。
- 使用函数
1 | |
2-4 全局变量
- 全局变量
- 函数外创建的变量,每个人都可用,无论是函数内部或外部。
- 函数内创建的同名变量,是局部变量,只能在函数内部使用。
- 若函数内外创建同名变量,全局变量将保持原样,全局并具原始值。
1 | |
2-5 全局关键字
- 全局关键字
- 在函数内部创建全局变量,使用
global关键字。 - 若更改函数内的全局变量,需要使用关键字引用。
- 在函数内部创建全局变量,使用
1 | |
3 运算符
- 运算符
- 算术:
+、-、*、/、%、**、//。 - 赋值:
=、+=、-=、*=、/=、%=、**=、//=、&=、|=、^=、>>=、<<=。 - 比较:
==、!=、>、<、>=、<=。 - 逻辑:
and、or、not。 - 身份:
is、is not。 - 成员:
in、not in。 - 位运算:
&、|、^、~、<<、>>。
- 算术:
3-1 算术
1 | |
3-2 赋值
1 | |
3-3 比较
1 | |
3-4 逻辑
1 | |
3-5 身份
1 | |
3-6 成员
1 | |
3-7 位运算
1 | |
4 数据类型
- 数据类型
- 无类型:
NoneType。 - 数字类型:
int、float、complex。 - 文本类型:
str。 - 布尔类型:
bool。 - 序列类型:
list、tuple、range。 - 集合类型:
set、frozenset。 - 映射类型:
dict。 - 二进制类型:
bytes、bytearray、memoryview。
- 无类型:
1 | |
4-1 数字
- 数字
int:整数,正数或负数,没有小数,长度不受限制。float:浮点数,包含一个或多个小数的正数或负数,可有带e的科学数字表10的幂。complex:复数,使用j作为虚部,可用complex(a, b)表示,也可用a + bj表示。
1 | |
- 构造:类型转换就是使用构造函数完成的。
int():整数、浮点数或字符串构造整数。str():各种数据类型都可以构造字符串。float():整数、浮点数或字符串构造浮点数。
1 | |
4-2 字符串
- 字符串
- Python中的字符串用单引号
''或双引号""括起来。 - 可以使用三个引号
''''''将多行字符串分配给变量。 - 字符串是表示Unicode字符的字节数组,没有
char字符数据类型,单个字符只是长度为1的字符串。 - 方括号可以用来访问字符串中的元素,由于字符串是数组,可以通过
for循环遍历字符串中的字符。
- Python中的字符串用单引号
1 | |
(1) 切片
- 使用切片语法返回一系列字符。
- 指定以冒号
:分隔的开始和结束索引,返回字符串的一部分。 - 通过省略开始索引,切片范围会从第一个字符开始,即位置0。
- 通过省略结束索引,切片范围将到达末尾,也可以使用负索引从字符串末尾开始切片。
1 | |
(2) 格式化
- 使用
+运算符连接或组合两个字符串,如果用于连接字符串和数字,将报错。 format()方法接受传递的参数,格式化字符串,可以用来组合字符串和数字。- 该方法接受无限数量的参数,并放置在相应的占位符中。
- 可通过索引号
{num}确保将参数放置在正确的占位符中。 - 使用命名索引
{name},传递参数值时必须使用相应的变量名name。
1 | |
(3) 内置方法
upper():以大写形式返回字符串。lower():以小写形式返回字符串。strip():删除开头或结尾的任何空格。replace():用另一个字符串替换当前字符串。split():返回一个列表,其中指定分隔符之间的文本成为列表项。
1 | |
(4) 转义字符
- 想在字符串中插入非法字符,可以使用转义字符
\,后跟插入的非法字符即可。 - 常见的转义字符
\'(单引号)、\\(反斜杠)、\a(响铃)、\n(换行)、\r(回车)、\ooo(八进制)。\v(纵向制表符)、\t(横向制表符)、\b(退格符)、\f(换页符)、\xhh(十六进制)。
1 | |
4-3 布尔值
- 布尔值
- 只表示为
True或False,这两个值中的其中一个。 - 函数
bool()允许评估任何值并返回True或False。
- 只表示为
1 | |
(1) True值
- 任何数字都是True,0除外。
- 任何字符串都是True,空字符串除外。
- 任何列表、元组、集合和字典都是True,空值除外。
1 | |
(2) False值
- 空值,例如
[]、()、{}、""、数字0和None,还有False本身。 - 用户自定义类型的对象
- 如果类定义了
__len__()方法,并返回0或False,则输出False值。 - 如果类同时定义
__len__()和__bool__()方法,则输出参考__bool__()的返回值。
- 如果类定义了
1 | |
(3) 返回情况
- 创建返回布尔值的函数,可返回布尔值。
- 返回布尔值的内置函数:
isinstance()。
1 | |
4-4 列表
- 列表
- 用于将多个项目存储在单个变量中,使用方括号
[]来创建。 - 列表项是有序可变的,且允许重复值,索引时第一项为
[0]。 - 列表长度使用
len()函数计算,列表项可以是任何数据类型。 - 列表的数据类型为
<class 'list'>,使用list()构造函数创建新列表。 - 四种集合数据类型
- list:列表,有序且可变的集合,允许重复成员。
- tuple:元组,有序不可变的集合,允许重复成员。
- set:集合,无序且不可变的集合(可删除或添加元素),无索引,不允许重复成员。
- dict:字典,有序且可变的集合(3.7版本开始有序,之前无序),不允许重复成员。
- 用于将多个项目存储在单个变量中,使用方括号
1 | |
(1) 访问表项
- 通过索引号来访问列表项,第一项的索引为0。
- 负索引从末尾开始,最后一项是-1,倒数第二项是-2,以此类推。
- 指定开始和结束位置来指定索引范围,返回值将是包含指定项目的新列表。
- 省略起始值,范围将从第一项开始,省略结束值,范围将继续到列表末尾。
- 从列表末尾开始索引需指定负索引,使用
in关键字确定列表中是否存在指定项。
1 | |
(2) 更改表项
- 更改特定项目的值,需要参考索引号。
- 更改特定范围内项目的值
- 使用新值定义一个列表,并参考要插入新值的索引号范围。
- 插入的项目多于替换的项目,则新项目将插入指定的位置,其余项目将相应移动。
- 插入的项目少于替换的项目,则新项目将插入指定的位置,其余项目将相应移动。
- 当插入的项目数和替换的项目数不匹配时,列表的长度会发生改变。
1 | |
(3) 添加表项
append():将项目添加到列表的末尾。insert():在指定索引处插入列表项。extend()- 将另一个列表中的元素附加到当前列表,元素会被添加到列表的末尾。
- 附加列表非必须,还可添加任何可迭代对象,例如元组、集合或字典。
1 | |
(4) 删除表项
remove():删除指定的项目。pop():删除指定的索引,若不指定索引,则删除最后一项。- 使用
del关键字可以删除指定的索引,也可以完全删除列表。 clear():清空列表,该列表仍然存在,但列表中没有内容。
1 | |
(5) 遍历表项
- 使用for循环可以遍历列表项。
- 还可以通过引用索引号遍历列表项,使用
range()和len()函数创建合适的迭代器。 - 使用while循环遍历列表项,
len()函数确定列表的长度,从0开始通过索引循环遍历。 - 还可以使用列表推导式(List Comprehension)进行循环遍历。
1 | |
(6) 列表推导
- 语法:
newlist = [expression for item in iterable if condition == True]。 - 返回值是一个新列表,保持旧列表不变。
condition:条件是过滤器,只接受条件为True的项,可选项,可省略。iterable:迭代对象可以是任何可迭代对象,例如列表、元组或集合等。expression:表达式是迭代中的当前项,但也是结果,可作为操纵结果的方式包含条件。
1 | |
(7) 表值排序
sort()- 按字母数字顺序对列表进行排序,默认情况下升序。
- 如果是降序排序,使用关键字参数
reverse = True。 - 还可以使用关键字参数
key = function自定义函数。 - 默认情况下该方法区分大小写,所有大写字母排在小写字母之前。
- 如果想要一个不区分大小写的排序,使用
str.lower作为键函数。
reverse():反转元素的当前排序顺序。
1 | |
(8) 其他操作
- 列表复制:
copy()制作列表副本,list()制作列表副本的另一种方法。 - 列表添加
- 可以使用
+运算符可以连接两个或多个列表。 - 将另一列表中的所有项目逐个附加到一列表中。
- 通过
extend()方法将一个列表中的元素添加到另一个列表中。
- 可以使用
1 | |
(9) 内置方法
count():统计列表元素出现的次数。index():返回指定值首次出现的位置。
1 | |
4-5 元组
- 元组
- 用在单个变量中存储多个项目,用圆括号
()书写。 - 元组项是有序不可更改的,并且允许重复值,被索引时第一项索引为
[0]。 len()函数确定元组长度,创建一个只有一项的元组,须在项目后添加一个逗号。- 元组项可以是任何数据类型,例如字符串、整数或布尔类型等,可以包含不同类型。
- 元组的数据类型为
<class 'tuple'>,可使用tuple()构造函数创建一个新的元组。
- 用在单个变量中存储多个项目,用圆括号
1 | |
(1) 访问组值
- 通过引用方括号内的索引号来访问元组项,第一项的索引为0。
- 负索引从末尾开始,最后一项是-1,倒数第二项是-2,以此类推。
- 指定开始和结束位置来指定索引范围,返回值将是具有指定项目的新元组。
- 省略起始值,范围将从第一项开始,省略结束值,范围将继续到列表末尾。
- 从元组末尾开始索引需指定负索引,使用
in关键字确定元组中是否存在指定项。
1 | |
(2) 更新组值
- 元组一旦创建就不可更改,可将其转换为列表,更改列表再转换回元组。
- 若要添加一个或多个项目,使用这些项目创建一个新元组,并将其添加到现有元组中。
- 删除元组中的项目同样需要先转换为列表进行操作,
del关键字则可以完全删除元组。
1 | |
(3) 元组拆包
- 创建元组并赋值称为元组打包,将值提取回变量中则称为元组拆包。
- 拆包时变量数须与元组值的数量匹配,否则使用星号
*将剩余值收集为列表。 - 若星号被添加到另一变量而非最后一个,Python将为变量分配值,直至剩余值数量与剩余变量数匹配。
1 | |
(4) 元组循环
- 使用for循环可以遍历元组项。
- 还可以通过引用索引号遍历元组项,使用
range()和len()函数创建合适的迭代器。 - 使用while循环遍历元组项,
len()函数确定元组的长度,从0开始通过索引循环遍历。
1 | |
(5) 添加元组
- 使用
+运算符可以连接两个或多个元组。 - 使用
*运算符将元组内容乘以给定次数。
1 | |
(6) 内置方法
count():统计元组中元素出现的次数。index():返回指定值首次出现的位置。
1 | |
4-6 集合
- 集合
- 用于将多个项目存储在单个变量中,用大括号
{}书写。 - 集合项是无序不可更改的,且无索引,也不允许重复值。
len()函数确定集合长度,集合项可以是任何数据类型。- 例如字符串、整数或布尔类型等,可以包含不同数据类型。
- 集合的数据类型为
<class 'set'>,使用set()构造函数创建一个新集合,for循环遍历集合项。
- 用于将多个项目存储在单个变量中,用大括号
1 | |
(1) 访问集合项
- 不能通过索引访问集合项,使用
for循环遍历,或使用in关键字确定集合中是否存在指定值。
1 | |
(2) 添加集合项
- 创建集合后无法更改集合项,但
add()方法可添加新项目。 - 使用
update()方法可以将另一个集合项添加到当前集合中。 update()方法中的对象,可以是任何可迭代的对象,例如元组、列表或字典等。
1 | |
(3) 删除集合项
- 使用
remove()或discard()方法删除集合中的项目。- 如果要删除的集合项不存在,使用
remove()将会报错。 - 如果要删除的集合项不存在,使用
discard()不会报错。
- 如果要删除的集合项不存在,使用
pop()方法删除最后一项,集合无序,不确定删除的具体项。clear()方法清空集合,集合仍在,del关键字完全删除集合。
1 | |
(4) 集合运算
union():返回一个包含两个集合中所有项目的新集合,会排除重复项。update():将一个集合的所有项目插入到另一个集合中,会排除重复项。intersection():仅包含存在于两个集合中的相同项。intersection_update():仅保留两个集合中存在的相同项。symmetric_difference():仅包含存在于两个集合中的不同项。symmetric_difference_update():仅保留两个集合中存在的不同项。
1 | |
(5) 内置方法
copy():复制一个集合。difference():返回集合的差集。difference_update():移除指定集合中包含与另一个集合相同项的元素。isdisjoint():判断两个集合是否相交,不相交返回True,否则返回False。issubset():判断集合是否被其他集合包含,是则返回True,否则返回False。issuperset():判断集合是否包含其他集合,是则返回True,否则返回False。
1 | |
4-7 字典
- 字典
- 用于将数据值存储在键值对中,使用大括号
{}进行书写,带有键和值。 - 字典项目是有序可更改且不允许重复的,键值对形式呈现,用键名引用。
- 可使用
len()函数获取字典长度,字典的数据类型为<class 'dict'>。 - 字典的值可以是任何数据类型,例如:字符串、整数、布尔值或列表等。
- 用于将数据值存储在键值对中,使用大括号
1 | |
(1) 访问字典项
- 通过引用方括号内的键名来访问字典的项目,还可以使用
get()方法获取。 - 修改原字典对象,视图对象的值也会发生改变,视图对象包括以下三个方法。
keys()方法返回字典中所有的键列表。values()方法返回字典中所有的值列表。items()方法以列表返回可遍历的元组数组。
- 使用
in关键字可以确定字典中是否存在指定的键。
1 | |
(2) 更改字典项
- 通过引用键名来更改特定字典项的值。
update()方法使用给定参数中的字典项更新字典,参数必须是字典或具有键值对的可迭代对象。
1 | |
(3) 添加字典项
- 通过使用新的索引键并为其分配值来完成向字典添加项目。
update()方法使用给定参数中的字典项更新字典,参数必须是字典或具有键值对的可迭代对象。
1 | |
(4) 删除字典项
pop():删除具有指定键名的项目。popitem():删除最后插入的项目,3.7之前的版本会删除随机项目。- 使用
del关键字删除具有指定键名的项目,也可以完全删除整个字典。 clear():清空字典。
1 | |
(5) 遍历字典项
- for循环可以遍历字典项,返回值可以是字典的键,也可以是字典的值。
- 可以使用for循环配合
keys()和values()方法分别返回字典的键和值。
1 | |
(6) 字典复制
copy()方法可以复制副本,dict()方法则可以制作副本。
1 | |
(7) 字典嵌套
- 字典嵌套指字典可以包含字典,可以将其他字典添加到一个新字典中。
1 | |
(8) 内置方法
setdefault():与get()方法类似,如果键不存在于字典中,就会添加键并将值设为默认值。fromkeys():创建新字典,以序列中的元素作为字典的键,value为字典所有键对应的初始值。
1 | |
5 数组
- 数组
- Python没有数组类型,只有列表类型,数组可以用列表来替代。
- 数组用于在一个变量中存储多个值,通过索引号来访问这些值。
- Python没有对数组的内置支持,列表代替时内置方法与之相通。
append()、clear()、copy()、count()、extend()。index()、insert()、pop()、remove()、reverse()、sort()。
1 | |
5-1 numpy库
- numpy库
- 数组在numpy库中定义,若要使用,需事先导入库,数组类型为
<class 'numpy.ndarray'>。 - numpy中的数组对象称为ndarray,通过使用
array()函数可以创建一个numpy的ndarray对象。 - 将列表、元组或任何类似数组的对象传递给
array()方法,array()方法将其转换为ndarray。
- 数组在numpy库中定义,若要使用,需事先导入库,数组类型为
1 | |
5-2 数组维度
- 数组维度
- 数组维度是嵌套数组的一个级别,嵌套数组即数组中有数组。
- 零维数组,也叫标量,数组值只有一个。
- 一维数组,指由多个元素值构成的数组。
- 二维数组
- 是一维数组的数组,通常用于表示矩阵,或者是二阶张量。
- numpy库中有专门用于矩阵运算的完整子模块
numpy.mat。
- 三维数组,是二维数组的数组。
- 数组可以拥有任意数量的维度,创建数组时使用ndmin参数定义维数。
1 | |
5-3 数组裁切
- 数组裁切
- 数组裁切类似列表和元组的切片,格式:
[start: end]或[start: end: step]。 - 将元素从一个给定的索引切到另一个给定的索引,包含开始索引,不包含结束索引。
- 数组裁切类似列表和元组的切片,格式:
1 | |
6 if语句
- if语句
- 使用
if关键字编写。 - 支持
if...、if...elif...、if...elif...else...和if...else...四种格式。 if...格式,如果只有一条语句要执行,可以将该条执行语句与if语句放在同一行上。if...else...格式,如果只有一条语句要执行,可以将执行语句与if语句放在同一行。- 如果if语句没有内容输出,使用
pass关键字可以避免语句报错。
- 使用
1 | |
7 for循环
- for循环
- 用于迭代序列,例如列表、元组、集合或字符串等,不需要预先设置索引变量。
- 使用
break关键字,可以在循环遍历所有项目之前停止循环。 continue关键字,停止循环的当前迭代,并继续下一个循环。- 若for循环语句没内容输出,使用
pass关键字可避免语句报错。
1 | |
7-1 range()函数
- range()函数
- 循环一组代码指定的次数,可以使用
range()函数。 - 返回一个数字序列,默认从0开始递增1,并以指定的数字结束。
range()函数默认是以0作为起始值的,通过添加参数来指定。range()函数默认序列递增1,可以通过添加第3个参数来指定。
- 循环一组代码指定的次数,可以使用
1 | |
7-2 else关键字
- else关键字
- for循环中的
else关键字用来指定循环结束时要执行的代码块。 - 如果循环语句被
break停止,则else语句的代码块不会被执行。
- for循环中的
1 | |
8 while循环
- while循环
- 只要条件为真,就可以执行一组语句。
- 使用
break关键字,即使while条件为真,也可以停止循环。 - 使用
continue关键字,停止当前迭代,并继续下一个循环。 - 当条件不再为真时运行一段代码,可以使用else语句。
1 | |
Python 基础(一)
https://stitch-top.github.io/2021/01/01/python/python01-python-ji-chu-yi/