Python基础
1.python认识
1.1注释
注释 在代码中,起到说明作用的文字(python解释器不执行)
?
作用:
帮助开发者理解和回顾代码
方便其他人阅读
单行注释 ----> #
多行注释 ----> 3个单引号 或 3个双引号
?
快捷键
注释: ctrl + /
规范: ctrl + alt + l
1.2输入
输入 通过外设(键盘,手写板...)将信息写入到计算机
?
作用: 与计算机进行计信息交互
?
语法:
变量 = input("提示信息") ---->input
注意:input的输出结果是字符串str
1.3输出
输出 就是将信息输出到控制台
?
作用:
在控制台的输出,方便开发者查看代码运行的结果
语法:
print(字符串) ?----> 在控制台打印出字符串
print(变量) ?----> 在控制台打印变量对应的数据
print(数据1, 数据2, ...) ?---->连续打出多个数据
print(数据1, 数据2, ..., sep="分割符号") ?---->自定义分割符号
print(数据1, 数据2, ..., end="") ?---->产生不换行的效果
1.4变量
变量 用来存储数据
?
作用:
处处用到变量
存储一次,再次使用的时候直接可以通过变量性进行数据使用
语法:
变量名 = 数据(值)
变量的具体操作
增 ?---> 定义变量 ?---> 变量名 = 值
删 ?---> del 变量名
改 ?---> 就得变量名 = 新值
查 ?---> print(展示数据在控制台)
1.5变量的其他用法
其他用法 笔试或者面试
?
语法:
连续给不同的变量赋值
交叉换值
给多个变量赋同一个值
查询变量对应数据的内存地址方法 ? ---> id(变量)/id(数据)
1.6标志符和关键字
标识符 在编写代码时程序员 自定义的 变量名, 函数名, 类名
关键字 python自带的英文单词, 或单词缩写
?
作用:
见名知意
程序员取名的名字
程序员自定义名字的时候, 禁止使用关键字
语法:
标志符的规则: 由字符(严格区分大小写), 数字, 下划线组成, 并且数字不能开头
标志符方法:
1.大驼峰--->多个单词构成,每个单词首字母全部大写
2.小驼峰--->多个单词构成,除了第一个单词首字母小写,其余单词首字符都大写
3.下划线--->多个单词构成,每个单词中间用下划线隔开
1.7数据类型
数据类型 对数据的分类
?
作用:
每一种数据类型, 对应不同的属性和方法
语法:
查看数据类型的方法 ----> type()
整数 --->int 注意:整数进行除法运算得到的结果,都是浮点数
小数(浮点数) ---->float
布尔值(用作逻辑判断) ----> bool
True ----> 表示条件为真
False ----> 表示条件为假
字符串(将一串字符合在一起表示) ----> str
定义字符串
单行字符串 -->2个单引号或双引号引起来的,都叫字符串
多行字符串 -->3个单引号护双引号引起来,变量进行赋值(不赋值的话就做注释用)
2.基本语法
2.1算数运算符
算数运算符 进行数字计算的符号
?
作用: 代码中对数字进行计算
?
语法:
+ ----> 加
- ----> 减
* ----> 乘
/ ----> 除
% ----> 取余
** ---> 次方运算
// ---> 除法去整数
round(变量名, 保留小数的位数)
2.2比较运算符
比较运算符 比较条件为真或为假
?
作用: 进行条件判断时使用
?
语法:
== ----->比较两个数据值是否相等
<, >, <=, >=, !=
2.3赋值运算符
赋值运算符 变量赋值时进行简单的计算
?
作用: 在循环代码中会使用
?
语法:
= ----> 给变量赋值
+= ----> a += b 效果同于 a = a + b
-= ----> a -= b 效果同于 a = a - b
2.4身份运算符
身份运算符 两个数据的内存地址是否相同
?
作用: 判断两个数据的内存地址
?
语法:
== -----> 两个数据的值是否相同
is -----> 两个数据的内存地址是否相同
数据类型分类:
简单数据类型 ---> ***值相同,内存地址一定相同
整数,浮点型,布尔型,字符串
复杂数据类型 ---> ***值相同, 内存地址不同
列表,字典,(元祖), 集合
2.5逻辑运算符
逻辑运算符 对布尔值进行计算,通常情况下是True 或 False
?
作用: 条件判断
?
语法:
and ---> 与 关键:遇假全假
or ?---> 或 关键:遇真全真
not ---> 取反
逻辑运算符的特殊性
1.其他数据也可以当成布尔值 进行逻辑处理
1.1 ?0, "", {}, [], None 表示False进行判断
1.2 其他数据都是True
2.短路性: 当前面的逻辑判断已经可以判断出整个结果,后面的逻辑不再判断
3.逻辑运算的取值: 在发生短路的地方取最后进行判断的值
2.6类型的转换
类型的转换: 将不同的数据类型进行数据的交换
注意:
转换的数据一定要符合数据的格式
当浮点数转换为整数时,会失去精度(小数位)
?
作用:
前端和后端数据交换的时候
为了计算而转换
语法:
int() ---> 将数据转换成整数
float() ---> 将数据转换成浮点型
str() ---> 将数据转换成字符串
list() ---> 将数据转换成列表
tuple() ---> 将数据转换成元组
2.7不同类型数据之间的计算
较少用到
?
整数 + 浮点数 ---> 浮点数
布尔型 + 数字 ---> True表示1, False表示0
字符串1 + 字符串2 ---> 将字符串1和字符串2进行拼接
字符串 * 整数(次数) ---> 重复字符串的次数
2.8变量的格式化
变量的格式化 将变量放进字符串中一起输出
?
非常有用!!
?
语法:
1.%格式化
%s ---> 格式化字符串数据
%d ---> 格式化整数数据
%.2f ---> 格式化浮点数数据
%% ---> 显示百分号
2.f格式化(重点!!!)
f'{变量}'
2.9if分支
条件控制 根据条件的真或假来选择性的执行代码
?
作用: 代码中做选择判断的时候
?
语法:
1. if单分支
? ? ? ?if 条件判断:
? ? ? ? ? 执行满足条件的代码块
? ?2. if双分支
? ? ? ?if 条件判断:
? ? ? ? ? 执行满足条件的代码块
? ? ? ?else:
? ? ? ? ? 执行不满足条件的代码块
? ?3. if多分支
? ? ? ?if 条件1:
? ? ? ? ? 满足条件1时执行的代码块
? ? ? ?elif 条件2:
? ? ? ? ? 满足条件2时执行的代码块
? ? ? ?elif 条件3:
? ? ? ? ? 满足条件3时执行的代码块
? ? ? ....
? ? ? ?else:
? ? ? ? ? 当上面条件都不满足执行的代码块
? ? 4. if的嵌套
? ? ? ?if中再进行if判断
2.10 循环while
循环 重复做一件事情
?
作用:
减少代码的冗余, 减轻开发人员的人力
当代码重复使用的时候
语法:
while循环基本语法结果
1.计数器 ---> i = 初始值
2.循环判断条件 ---> 用于判断循环什么时候结束
3.计数器自己增加 ---> 每循环玩一次,通常加一
语法结构:
i = 初始值
while 循环的判断条件:
需要循环的代码块
i += 数字
3.循环与列表
3.1循环控制语句
循环控制 通过break 和 continue 来跳出循环
?
作用
代码中需要中途退出循环
1.break 跳出后不再进行循环
2.continue 跳出本次循环, 下一次继续循环
3.2死循环
死循环 while没有结束的条件(条件一直为真)
?
作用
死循环单独使用是不允许的
死循环和break可以联合使用
语法
while True:
执行的代码块
3.3while_else
while...else ?while的完整语法
?
作用 解决while循环中重复打印内容
?
语法
初始化计数器
循环判断条件
计数器自增
else 和break连用
3.4while循环嵌套
while循环嵌套 while中再while循环
?
作用
两层循环 ---->较多
多层循环 ---->较少
?
语法
while 判断条件:
while 判断条件:
3.5列表的介绍
列表 有顺序的 存放数据的 容器
?
作用 对于相同类型和属性的数据, 通常用列表存储
?
语法
列表名 = [元素1, 元素2, 元素3....]
列表名 = []
注意:
1.列表中的数据,成为元素
2.列表中的锇元素直接用逗号隔开
3.[]表示创建一个列表
索引号:在列表中从左到右, 从0开始一次整数递增, 每一个索引号对应唯一的元素
3.6列表的添加
末尾添加 列表名.append(需要添加的元素)
任意位置插入 列表名.insert(索引号,需要添加的元素)
两个列表合并 列表名1.extend(列表名2)
3.7列表的删除
删除索引号指定的元素 del 列表名[索引号]
根据元素进行删除 列表名.remove(元素) -->如果列表中存在多个值,则删除从左往右第一个
默认删除最后一个元素 列表名.pop()
pop删除指定元素 列表名.pop(索引号) -->pop()可以将删除掉的元素返回
删除掉列表中的所有元素 列表名.clear() -->删除的是列表中的元素
删除列表 del 列表名
3.8列表的查询
查询元素(根据索引号) 列表名[索引号]
查询元素(根据元素) 列表名.index(元素)
默认查询的是从左到右的第一个元素
返回值是元素的索引号
如果没有对应的数据, 返回报错
查询列表的长度 ----> 有多少元素 len(列表名)
查询列表中元素出新的次数 列表名.count(元素)
3.9列表的修改
修改列表中的元素 列表名[索引号] = 新值
3.10列表的排序
列表的排序 排列列表中元素的顺序(不是索引号,而是编码排序)
?
作用 列表中元素为数字的排序
?
语法
升序排序 列表名.sort()
降序排序 列表名.sort(reverse=True)
反转排序 列表名.reverse()
3.11切片
列表的切片的概念 将列表中的元素'切一块出来',取列表中一个范围的元素
?
从列表中取连续的一组元素
?
语法
列表名[开始索引:结束索引:步长]
规律总结
当存在结束索引的时候 ---->包开始不包结束
索引号的规律
从左到右 ----> 从0开始计算
从右到左 ----> 从-1开始计算
切片的两个方向
步长方向
当步长为正数的时候,方向是从左到右
当步长为负数的时候,方向是从右到左
索引号方向
开始索引和结束索引产生的方向
进行值的判断
当步长方向 和 索引号方向 相反的时候,结果为[]
当步长方向 和 索引号方向相同的时候, 开始判断
当开始索引 或 结束索引为空无法确认索引号方向的时候,就跟步长一个方法
3.12列表的遍历
列表的遍历 将列表中的元素依次取出
?
作用 容器型的数据类型 ----> 列表
?
语法
while
for ----> 转恩用于容器的遍历
for 变量 in 容器
变量使用的相关代码
3.13元组
列表 有顺序的 存放数据的 可变的 容器
元组 有顺序的 存放数据的 不可变的 容器
?
作用 在代码中, 一些要求不可取改变的额数据,用元组来保存
?
语法
元组名 = (元素1, 元素2, 元素3...) ----> 元组的数据类型为tuple
4.字符串与字典
4.1字符串的介绍
列表 有顺序的 存储数据的 可变的 容器
元组 有顺序的 存储数据的 不可变的 容器
字符串 有顺序的 存储字符的 不可变的 容器
?
字符 字符串中的每一个字母, 数字, 符号被称为字符
转义字符:
1. 将有意义的转换成无意义的
2. 将没有意义的转换成有意义的 ---> \n(换行) \t(tab) \\(\)
处处使用字符串
?
语法
字符串 = "字符字符字符字符字符"
字符串 = '字符字符字符字符字符'
4.2字符串内容操作
字符串内容操作 其中字符的操作
?
作用:
从报错的错误中找出自己需要的字符
比如爬虫的应用
操作参考列表的操作
?
遍历(for和while) 和 切片操作 相同
4.3字符串的常用函数
字符串的常用函数 进行字符串操作的python自带的方法
?
比较常用
?
方法:
1. 去除字符串两边的空格 ---> 字符串.strip()
去除左边的空格 ---> 字符串.lstrip()
去除右边的空格 ---> 字符串.rstrip()
去除字符串左右两边指定的字符 ---> 字符串.strip("指定的字符")
2. 对字符串进行空格分割 ---> 字符串.split() 默认以空格进行切割
对字符串进行指定字符切割 ---> 字符串.split("分隔符") 按照指定分隔符进行分割
(指定分割的符号在结果中会消失)
对字符串进行指定字符切割,指定切割的次数 ---> 字符串.split("分隔符", 次数)
对字符串进行指定字符切割,指定切割的次数,从右边切 ---> 字符串.rsplit("分隔符", 次数)
结果: 试讲切割的数据作为元素放在一个列表中
字符串 = (拼接符号).join(列表) --->字符串拼接
4.4字符串的其他函数
大小写转换
字符串.lower() ---> 将字符串转换成小写
字符串.upper() ---> 将字符串转换成大写
?
指定字符
startswith()判断字符串开头是否是指定的字符 ?---> 判断字符串开头是否是指定的字符
endswith() --->判断字符串开头是否是指定的字符 ?---> 判断字符串开头是否是指定的字符
?
替换字符
字符串.replace("替换的字符") --->替换字符串中的字符
?
判断字符串中是否全部是数字
字符串.isdigit() ---> 判断字符串中是否全部是数字
4.5字典的介绍
列表 有顺序的 存储数据的 可变的 容器
元组 有顺序的 存储数据的 不可变的 容器
字符串 有顺序的 存储字符的 不可变的 容器
字典 无顺序的 存储键值对的 可变的 容器
类型为:'dict'
?
键值对 以键和值成对出现的映射关系的数据
区分:
数字列表 = [1, 2, 3, 4]
名字列表 = ["张三", "李四", "王五"]
键值对 "name":"名字" "age":18
语法:
标准语法:
字典名 = {键1:值1, 键2:值2, 键3:值3....}
字典的取值:
键:值
字典名[键] --->取值
注意:
一个字典中的键是唯一的
值可以重复
4.6字典的添加和修改
字典的添加和修改 增加和修改键值对
?
语法
增加 ---> 字典名[键] = 值
修改 ---> 字典名[已存在的键] = 值
添加默认值 ---> 字典名.setdedault(键, 值)
合并字典 ---> 字典名1,update(字典名2) (相同键会由字典2覆盖字典1的值)
4.7字典的删除
字典的删除 删除字典中的键值对
?
语法
del 字典名[键] ----> 将对应的键和值一起删除
字典名.pop(键) ----> 将对应的键值对一起删除,有返回值(删除内容)
eg: values = stu.pop('name')
字典名.clear() ---> 清空字典中所有键值对,保留一个空字典
del 字典名 ----> 删除字典
4.8字典的查询
语法
字典名[键] ----> 查看字典的值,当键不存在的时候,报错
字典名.get(键) ---> 当查看字典中的键不存在的时候,不报错
len(字典名) ---> 查看键值对的个数(字典的长度)
字典名.values() --->将字典中的值全部取出来
eg: my_values = stu.values
字典名.keys() --->将字典中的键全部取出来
eg: my_keys = stu.keys()
4.9字典的遍历
字典的遍历 通过for 将字典中的数据依次取出
?
作用: 可以把键, 值,键值对都一次取出,非常常用!!!
?
语法:
第一种 ---> 默认字典容器,遍历字典的所有键(默认情况)
for key in 字典:
print(key)
第二种 ---> 默认字典容器,遍历字典所有键(指定遍历键)
for key in 字典.keys():
print(key)
第三种 ---> 默认字典容器,遍历字典所有值(指定遍历值)
for values in 字典.values():
print(values)
第四种 ---> 将键值对以元组的形式遍历出来
for tuple_data in 字典名.items():
print(tuple_data)
第五种 ---> 将键值对以两个变量的形式一起遍历出来
for key, value in 字典名.items():
print(key, value)
?
4.10集合
集合 无顺序的 存储数据的 可变的 不重复的 容器
?
作用: 数据的去重
?
语法
set() ---> 去重方法
定义集合
集合名 = {元素1, 元素2, 元素3...}
4.11公共方法
len()
del()
max()
min()
ord() ---> 查看编码数字
in 的使用 ----> 判断一个数据 是否 在容器中 (布尔值)
5.函数
5.1函数的介绍
函数 有名字的, 可重复执行的代码块,调用才能执行
?
作用
解决代码冗余的问题
通过循环可以解决代码重复的问题
通过函数可以解决代码重复的问题
?
语法
定义函数:
def 函数名():
重复执行的代码块
注意:
def 为定义函数的关键字
函数名紧跟在def+空格之后
函数名属于标识符
标识符规则:由字母, 数字,下划线组成,不能以数字开头
标识符建议:大驼峰, 小驼峰, 下划线(推荐)
()是定义函数不可缺少的符号的符号
: 回车缩进,包含住下方的代码块
调用函数:
函数名()
注意
函数只需要定义一次,可以无限次使用
先定义在使用
直接print(函数名),表示存储缩进的代码块的内存地址
(),表示小括号
函数名(), 调用函数(执行函数定义的时候缩进在其中的代码块
5.2函数的参数
函数的参数 函数代码在运行中所设定的未知数
参数的分类 形式参数 和 实际参数
?
作用 函数的代码块需要使用未知数
?
语法
定义函数
def 函数名(形参1, 形参2...):
重复执行的代码块(函数体)
使用参数:
函数名(实参1, 实参2...)
5.3函数的返回值
函数的返回值 调用函数之后得到的一个值(可自定义可不定义)
?
作用 函数被调用的时候,返回值需要被用在别处
?
语法
def 函数名(形参1, 形参2...):
函数体
return 返回值
return注意:
函数默认可以不写返回值,如果不写,返回值为None
return 返回值,得到调用函数后的值
5.4函数定义三部曲
函数定义三部曲
函数名
函数名是标识符的一种
函数名由字母, 数字,下划线组成, 见名知意
建议试用下划线
参数
参数分为 形式参数 和 实际参数
形参是在定义函数的小括号中使用
实参实在调用函数的小括号中使用
返回值
返回值是调用函数的时候返回的数值
可以默认不写,此时默认返回值为None
在return 后面写返回值
尽量写上返回值,不知怎么写时就写1或0(成功或失败)
语法
def 函数名(形参1, 形参2...):
函数体
return 函数值
函数名(实参1,实参2...)
5.5pass的使用
pass 表示空语句,只是作为占位用
range():在循环遍历的时候,产生一个迭代器
结束数据: 包左不包右
range的开始数字不写的时候,默认从0开始
?
作用 非常多, 主要在代码没写完的时候
?
语法
for i in range(开始数字, 结束数字, 步长)
5.6函数的注释(略)
5.7返回值的加强
3. 语法(how)
? ?3.1 一个return 返回多个值 ? ----> 返回值的类型是元组, 元组中的每一个元素就是return的具体指
? ?3.2 一个函数中有多个return
? ?3.3 当不写return , 返回 None
5.8匿名函数
lambda 形参1, 形参2...:表达式
6.函数加强
6.1参数的加强
参数加强 对形参和实参进一步分类
形参:
默认参数:在定义形参的时候给一个默认值
给出默认参数后,调用函数可以不写该实参
给出默认参数后,调用函数时写了该实参即以写的值为准
当有默认参数时,默认参数在形参里面的后面
必传参数 在定义形参的时候没有默认值
调用的时候实参一定和必传参数 数量 和 未知 上一致
?
实参:
位置参数 在调用函数的时候,位置和必传参数一一对应
关键字参数 在调用函数的时候,给予明确的形参值
调用函数时,形参与值一一对应写出,不用考虑位置
?
作用 在工作灵活应用其他的分类方式
?
语法
def 函数名(形参1, 形参2, 形参3, ...,默认参数 = 值):
函数体(重复执行的代码块)
return 返回值
函数名(实参1, 实参2, 形参3 = 值, ...)
注意:
无论形参还是实参, '='赋值的参数形式一定在最后面
关键词参数不能重复赋值
6.2打包
打包 将未知个数的参数打包在一起使用
分类
元组打包 ----> 将未知个数的参数打包成元组来使用
字典打包 ----> 将位置个数的参数打包成字典来使用
?
作用 如果参数的数量未知,就使用打包去解决
?
语法
打包的语法(元组)
def 函数名(*args):
函数体
return 返回值
函数名(填写任意个数的实参)
打包的语法(字典)
def 函数名(**kwargs):
函数体
return 返回值
函数名(填写任意个数的关键字参数)
6.3拆包
拆包 将元组(列表) 或 字典
分类
元组(列表)拆包
字典拆包
?
作用 数据和代码分离的情况下使用
?
语法
元组和列表拆包
def 函数名(形参1, 形参2, 形参3):
函数体
return 返回值
函数名(*args) #args就是元组或列表名
注意:
拆包 包中的元素个数一定和要使用的函数的形参数量一样
拆包 包中的元素未知一定也是和要使用的函数的位置一样
字典拆包
def 函数名(形参1, 形参2, 形参3):
函数体
return 返回值
函数名(**kwargs) #kwargs就是字典名
注意:
拆包 包中的键一定和要使用的函数的形参的名字相对应
拆包 包中的键值对的顺序可以任意
6.4变量的作用域
作用域 使用的范围
变量的作用域 变量的使用范围
?
分类
全局变量作用域 ---> 在函数外定义的变量的使用范围 ---> 任何位置都可以使用
局部变量作用域 ---> 在函数内定义的变量的使用范围 ---> 只能在函数内部自己使用
需要考虑变量的实际使用范围
6.5变量的分析
语法
? global 变量
? 变量的具体使用
6.6函数的嵌套
函数的嵌套 函数中套用函数
6.7递归函数
递归函数 自己嵌套自己
?
注意
循环中套用自己即为开始下一次循环,不会深入函数无限套用!!!!
7.文件相关操作
7.1文件的介绍
文件 在硬盘上存储数据的一种方式
?
分类
文本文件 人能够看得懂的文件
二进制文件 人看不懂的,以0或1格式组成的机器语言
文本文件 转换成 二进制文件 ----> 编码 utf-8
二进制文件 转换成 文本文件 ?----> 编码 utf-8
编码是怎么来的
计算机最小单位 ---> bit
1个字节是 8bit
ascll码 ----> 127
1个英文字母 ----> 1个字节来表示
GBK2312 ----> 加入了中文
1个中文 ----> 2个字节来表示
Unicode编码 ----> 把各个国家的都统一起来
1个英文字母 ----> 2个字节来表示
utf-8
1个英文字母 ----> 1个字节来保存
1个中文 ----> 3个字节
文件可以长期保持数据
7.2python操作文件
python操作文件: 通过python代码对文件进行读或写操作
?
三部曲:
打开文件
fp = open("文件的路径", "打开方式",编码)
操作文件
fp.操作函数()
关闭文件
fp.close
7.3打开文件分析
打开文件
fp = open("文件的路径", "打开方式", 编码格式)
fp 称为 操作句柄
?
文件的路径
绝对路径: 从根目录开始的文件路径 ---> 使用r字母去除路径中的转义
想对路径 相对于当前执行的文件的路径(建议使用)
打开方式
r ---> 只读
w ---> 只写,清除之前的内容
a ---> 只写,在之前的内容后继续追加
rb ---> 只读(二进制的方式)
wb ---> 只写,清除之前的内容(二进制的方式)
ab ---> 只写,在之前的内容后继续追加(二进制的方式)
注意
以二进制的方式操作文件时,不需要再写编码格式
以二进制的方式操作文件时,必须是相应的二进制数据 b"字符串"
r+, w+, a+ : 以读写方式打开文件
总结
当文件不存在,使用写的操作(w,a)会自动创建文件
打开方式是r时,只能相应的读操作(read())
打开方式是w/a的时候,只能相应的写操作(write())
7.4操作的文件分析
游标 标记写或读操作的开始位置
?
打开文件
r ----> 以只读的方式打开
w ----> 以覆盖写的方式打开
a ----> 以追加写的方式打开
操作文件
读操作
read() ---> 读取文件中的全部内容
read(number) ---> 读取文件中指定字符数量的内容
readline() ---> 读取文件中的一行内容
readlines() ---> 读取文件中每一行的内容,并且以列表的数据类型展示
写操作
write("字符串") ---> 往文件中写入一个字符串内容
---> 返回写入的字符的数量
writelines(容器) ---> 往文件中写入多个字符串,字符串是放在容器中
---> 返回值是None
7.5复制文本文件(略)
7.6任意文件的拷贝(略)
7.7大文件的拷贝(略)
7.8os模块操作
os模块 python自带的对文件进行操作的方法
?
import os
|