python笔记
来自b站中,孙兴华 老师的课程笔记!
目录看起来多,只是为了让有基础的兄弟选择查看,内容其实一点都不多!可以翻着看一下,有基础的感觉只用看目录就可以重温python基础,不用浪费太多时间了。
文章目录
- python笔记
安装
具体安装细节,python环境配置很简单,b站有很多教程,因为过于简单,环境配置忽略
python的安装
官网网址下载:https://www.python.org/
pytharm
官方网址下载:https://www.jetbrains.com/pycharm/
简介
什么是python?
python 优雅、简单、明确,具有丰富的、强大的库
被称为胶水语言,能把各种语言的模块,轻松的结合在一起。
python除了不会生孩子,全都会(个人感觉)
了解可以去百度,不说废话,直接开始。
基本语法
注释:
#
注释是不被显示出来的
Tab键
Tab 或者 4个空格
输出
print ( ' 输出 ')
(了解:print中的有两个属性, end="\t"属性是隐藏的,会默认换行,sep=" , "属性也是隐藏的,意思是默认的中间分割键)
(例如:`print ( ’ 输出 ’ , end= " \t " , sep = " … "))
我们可以看到,修改了属性之后,程序则不会按照默认的指示走。
"+"号
对于两个字符串或者有一个甚至多个字符串来说,是拼接的意思。但是对于两个或多个数字来说,是运算的含义
单引号和双引号和三个引号
单引号和双引号字符串的含义
三个引号是 多行文本字符串的含义(支持换行)
转义
"\"在程序中,是转义的含义
或者
在整个字符串前面加入 “r” (推荐)
变量
变量是可以随时变化的
前两个我们都比较好理解,
第三个我们可以清楚的看到,变量实现了交换,也称为交换变量
第四个案例中, " f " + 字符串 的意思是带入变量,我们可以看到图中最后一个实例的结果,可以将变量内容带入进字符串中。
输入 input
接受用户输入的结果,默认都是字符串类型,并不是数值类型
类型转换(int()、float()、str() )
int: 整数型 顾名思义
float:小数、浮点型 顾名思义
str:字符串 类型 顾名思义
检查数据类型( type() )
顾名思义,不过多解释
查询 地址
查询字符串的地址:
id(xxx)
运算(+、-、*、/、//、%、**、小括号)(+=、-=、*=、/= 等等)
意思分别是:
+加、- 减、* 乘、/ 除、// 取整、% 取余、** 指数、
小括号是用来提高优先值
+= 实例: a = a + 1(等下同理)
比较运算符( == , != , > , >= , < , <= ,and、or、not)
等于、不等于、大于、大于等于、小于、小于等于,和、或、不等于
rfind ()
rfind ( )
显示文件最后出现的位置
列表
增 ( append()、extend()、insert() )
列表末尾增加单个数据:
变量名 . append (数据)
列表末尾增加多个数据:变量名 . extend( [ ' 数据1 ',' 数据2 ' ])
在指定位置增加数据:变量名 . insert ( '索引' ,'数据' )
删( del()、pop()、remove()、clear())
删除数据: del()、del[ 下标 ]、pop(下标,默认最后一个,并且返回该数据)
移除某个数据:变量名 . remove( 数据 )
清空列表:clear()
改
修改:利用
=
来进行修改
查( reverse()、sort() )
reverse( ): 把这个列表倒序排列
sort():排序 ⇒ sort ( reverse = True ) 按照倒序进行排序、反之则正序
for i in 循环体
print(临时变量)
索引
下标:从0开始,标点、汉字也算一位,例如
name[2]
,是name这个结果第二个索引值
切片:
序列 [ 开始位置下标:结束位置下标(不包含结束所包含的数据):步长(默认为1) ]
查找⇒ 字符串( find()、index()、count() )
查询某个字符串是否包含在其中,如果在返回下标,如果不在,返回 -1。
语法:
变量名 . find \ index \count ( 子串,开始下标,结束下标 )
两种方法查找的结果基本都一样,唯一不一样的是,find()在找不到的时候,返回-1,而index返回的是报错信息!
count()
:查询出来的是结果数量信息
替换( replace() )
替换:
replace(旧字符串,新字符串,替换次数)
分割(split ( ))
分割:
split(分割字符、分割次数)
合并( join() )
合并:“合并的符号”.join( 子串 )
返回列表长度( len() )
返回列表长度
检查字符串的开头和结尾 ( startswith \ endswith )
字符串.startswith \ endswith(子串,开始下标,结束下标)
返回的结果为:True
、False
复制(copy())
复制:变量名.copy ( )
元祖
简介:列表中的数据是可以修改的,但是元祖里面的数据是不能够被修改的。
实例:变量名称 ( ' 数据1 ',' 数据2 ' )
,
如果里面是单个数据,则需要变量名称(1 , )
,后面不能忘记 逗号!
序列中的转换( list() 、tuple() )
list(序列名)
# 将序列转换为列表
tuple(序列名)
# 将序列转换为元祖
条件语句(if、else、elif)
if 条件:
条件成立1
条件成立2
if 条件:
条件成立1
else:
条件成立2
if 条件:
条件 1
elif 条件:
条件 2
else:
条件 3
字典与集合
字典
字典:不支持下标,按照 键 和 值 出现。键是唯一的,值是可以重复的。
例如:
字典名 = { '华为' : 520, '小米':'黑色' }
创建空字典
例如:
名字 = { }
或名字 = dict()
修改值(如果存在则修改,不存在则创建)
字典 [ 键 ] = 值
删除数据
del字典名[键]
、
del字典名
⇒ 删除整个字典、
clear()
⇒ 清空
查询数据
get ( )( “查询的键”,“返回的值(不写返回的是None)”)语法
如果键存在返回值,键不存在,返回第二个参数、
values( )语法
返回的是里面所有的值
items( )语法
以元祖的方式进行返回
字典的循环遍历
for i in 字典名.keys():
print(键)
for i in 字典名.values():
print(值)
for i in 字典名.items():
print(键 和 值)
for i,j in 字典名.items():
print(f ' { 键 } = { 值 } ')
集合
set( ) 创建集合
集合的特点:
自动去重、不支持下标,是随机的。
增加数据
集合 . add ( 数据 )
追加数据
集合.update(数据序列)
删除数据
集合.remove ( 数据 ) :发现错误不存在。报错
集合.discard( 数据 ):发现错误不存在。不报错
集合.pop ( 数据 ):删除集合中某个数据,并且返回某个数据
查找数据
in:判断数据在集合中
not in: 判断数据不在集合中
for循环、公共操作和推导式
for 临时变量 in 序列:
break ⇒ 终止循环
continue ⇒ 退出本次循环
for 临时变量 in 序列:
执行的代码
else:
循环正常结束时,要执行的代码。
公共操作
len() :计算容器中的个数
del() :删除
max ( )、min ( ) :最大最小值
range ( start、end、step):生成从start开始到end结尾,中的步数为step,供for循环使用
enumerate(可遍历对象,start=0(默认下标为0)):函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合成一个索引序列,同时列出数据和数据下标,一般用于for循环当中。
实例:
```
for i,j in enumerate(列表名):
print ( i,j )
```
while循环
直到条件不成立为止,结束循环。
结束循环:break
;结束本次循环:continue
while条件:
条件成立重复代码
……
while条件:
条件成立重复代码
……
else:
结束循环之后要执行的代码
九九乘法表案例
函数
函数需要先定义,再实现
def 函数名 (形参)
代码1
代码2
=== 调用函数 ===
函数名(实参)
=== `return` 退出当前函数 ===
实例:
定义函数
def 函数名(形参):
""" 说明文档位置 """
代码
……
查看函数说明文档
help(函数名)
添加默认参数
位置可变参数
返回的是元祖
一个 “ * ” 号
实例:
关键字可变参数
返回的是字典
两个 “ * ” 号
实例:
局部变量和全局变量
顾名思义,只能在范围内使用。
在函数内部修改为全局变量
切记!不到万不得已,不能使用(global)
案例展示:
递归(套娃)
必须留有接口。return。
lambda表达式
当函数只有一个返回值,且代码只有一句话的时候,可以用lambda简写
.
简写:lambda函数能接收任何数量的参数且只能返回一个表达式的值
实例
filter(函数名,可迭代对象)
我们可以看到,直接输出 是 list 的地址值。我们需要把结果用 List 的形式,输出出来。
map(函数名,可迭代对象)
将可迭代的每一个对象,拿出来运算加工。直到加工完毕。
迭代相加:reduce(函数名(x,y),可迭代对象)
① 导入 functools
② reduce (函数名,迭代对象)
文件和文件夹
文件夹的三种方式
打开文件
文件对象 = open(’ 文件名 ’ ,’ 访问方式 ')
1)访问模式(三个主访问模式)
‘r’ 只读 :如果文件不存在报错,不支持写
‘w’ 写入 :如果文件不存在新建文件,写的时候会覆盖原有的内容
‘a’ 追加:如果文件不存在新建文件,写的时候在原有的基础上追加
访问模式可以省略,默认为“r”。
2)访问模式特点(‘b’二进制、“+”可读可写)
r \ rb \ r+ \rb+ : 只要文件不存在就报错。文件指针(光标的位置)放在文件开头
w \ wb \ w+ \ wb+ : 只要文件不存在就新建文件。光标在开头。用新内容覆盖
a \ ab \ a+ \ ab+ : 只要文件不存在就新建文件。文件指针在结尾。
读写文件
文件对象.write(内容)
文件对象.read(num)
.
表示要从文件中读取数据的长度(单位是字节)【换行 /n 占一个字节】,忽略就表示读取所有的数据
.
文件对象.readlines()
# 需要赋值一个变量
将整个文件一次性读取,并返回一个列表,源文件中每一行的数据为一个元素。只有最后一行不带 \n
文件对象.readline()
# 需要赋值一个变量
每一次调用读取一行,不带 \n
关闭文件
文件对象.close()
偏移指针
文件对象.seek(偏移量,起始位置)
起始位置:0 开头,1 当前位置,2 文件结尾
偏移量: 假设起始位置为开头,偏移量为 5 。那文件指针就在第 6 个字节上
偏移量和起始位置都为0时,只能写一个 0 。
文件
导入 os 模块
重命名文件名称
os.rname ( '新文件名','旧文件名')
删除文件(不能是文件夹)
os.remove(目标文件)
创建一个文件夹(重复文件夹会报错)
os.mkdir (文件夹名称)
获取当前目录
os.getcwd()
改变默认目录
os.chdir(目录)
获取某个目录 / 当前文件夹下所有的目录
os.listdir(目录)
闭包 、 装饰器 和 语法糖
闭包:内部函数引用了外部函数的局部变量。称之为“闭包”。
实例展示:
装饰器:Python装饰器(Decorators)是一个高级Python功能,允许你修改或增强函数、方法或类的行为,而不需要改变其源代码。装饰器本质上是一个接受函数作为参数的高阶函数,并返回一个新的函数。这使得你可以在不修改原始函数的情况下,添加额外的功能或修改其行为。
装饰器的基本语法是使用@符号,后面跟着装饰器的名称,然后是一个函数定义。
实例展示:
插一句嘴
我们可以看到上一个案例中,Debug 了 很多行,是因为我在想为什么参数需要加 “**”,而等我输出的时候却不需要加了呢?
人工智能是这样回答的:
print函数接收了不同数量和类型的位置参数,并将它们打印出来。这是print函数内部实现的一部分,它允许这种灵活性而不需要你在调用时添加任何特殊的语法。
.
总结一下,print函数不需要加两个星号(**)来调用,是因为它本身是设计为可以接受可变数量参数的内置函数,而不是通过 *args 或 **kwargs 语法来定义的。
面向对象
封装代码,定义 类
注意:
类一定要用 大驼峰 命名,而函数需要利用 小驼峰 命名,这样便于区分
介绍:先有类,再有对象,然后用类实例化一个对象。
构造方法(魔法方法)
魔法方法:指的是有特殊功能的函数
__init__:初始化对象
self = 调用该函数的对象,而不是具体的某一个对象!!
实例:
__str__:输出对象状态
简介:在Python中,str 是一个特殊方法(也称为魔法方法或双下划线方法),它定义了一个对象转换为字符串时的行为。当你尝试打印一个对象或者将对象转换为字符串时,Python会自动调用这个对象的 str 方法。
继承
(单继承)
类的参数中,object ⇒ 最高类,叫基类,其他的叫做派生类。
简介: 如果两个类存在父子继承关系,子类即便没有任何的属性和方法,那么用子类继承了某个父类,并且子类创建了一个对象,那么这个对象就拥有父类当中,所有的属性和方法。就像生活中,子女继承父母财产一样。
注意事项:如果类中没有内容,一定要记得写一个“pass”来站位哦 ~~
(多继承): 会默认继承第一个
__mro__:
__mro__:手动查找继承的顺序
子类拥有与父类相同的属性和方法(会默认使用第一个子类的属性和方法)
实例展示:
如果想子类使用所有的父类,就需要用到调用父类的属性和方法,例如:
多层继承(能不用尽量别用,容易出错有bug)
请看详解,很简单,不过多的解释
拓展知识(组合)
可以看视频进行分析哦~~
私有权限
作用:如果发生继承关系的时候,某一些属性或者方法不想被子类所继承,就可以用到私有权限
设置私有权限的方法:在属性名和方法名称前面加上两个下划线_
注意:私有属性和方法只能在类里面访问和修改!
在Python中,一般定义函数名称为“get__xx”用来获取私有的属性,定义“set__xx”用来修改属性。用get和set是工作习惯,可以改名,但是要知道是获取和修改,切记!先获取再修改
super方法
面向对象的三大特征
封装
- 将属性和方法写到一个类里面,叫做封装。
- 封装可以为属性和方法添加私有权限
继承
- 子类默认继承父类的所有属性和方法
- 子类可以重写父类的方法和属性
多态
传入不同的对象,产生不同的结果
给大家展示一下 加上 @classmethod 和不加 @classmethod 的使用效果
我们可以看到,第一个没有加语法糖,只是给当前创建的类对象进行了修改,而加上语法糖,是给类对象彻底的进行了更改。
通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,它与类唯一的关联就是需要通过类名来调用这个方法
异常处理和存储数据
报错的抛出和提示。
以下的as:相当于重命名。
导入import
恭喜大家,完结撒花~~
标签:文件,函数,对象,一篇,py,字符串,字典,数据,入门 From: https://blog.csdn.net/quokka56/article/details/136233877如果在看的时候,有什么问题,记得反馈给本人,将第一时间修正!感谢!