python入门
1、注释
单行注释:Ctrl+#
多行注释:""" “”"
三种波浪线
颜色:红色
作用:语法检查
颜色:灰色
作用:规范
颜色:绿色
作用:单词拼写
2、算数运算符
+、-、*、/、//(整除)、%(取余)、**(幂,优先级最高)
3、变量
变量名=值
变量名命名规范
1、只能由数字,字母,_(下划线)组成
2、不能以数字开头
3、不能是关键字
4、区分大小写
变量类型
数值型 int、float、boolean
非字符型 str (string)字符串
类型在使用的过程中随时发生改变,以最后一次执行=操作的结果为准。
第一个函数:print() 打印输出 print( end="\n") = print()
第二个函数:type() 显示变量类型 print(type(age))
赋值操作:空间放左边,数据放右边,中间使用=连接
字符串运算:①+号可以将两个字符串连接在一起
②字符串可以使用与数字相连,表示反复连接多个字符串,连接的数量是后面的数字
第一种格式:输入函数input()
第二钟格式:input(“提示信息:”)
使用input操作得到的数据都是字符串str类型的
数据类型转换:int->float
比较运算符:
1、对两个字符串中对应位置每个字符逐一比对
2、排序较小的整体字符串值小
3、如果比较结果相等,比较下一个字母
4、直到比对到最后一个字母
5、若比对的一方没有字符,则整体字符串值小
2、分支语句
if格式
单一情况
if 条件:
____执行语句
对立情况
if 条件:
____执行语句
else:
____执行语句
多条件判断
if 条件1:
____执行语句
elif 条件2:
____执行语句
elif 条件3:
____执行语句
…
else:
____执行语句
if嵌套
if 条件:
____if 条件:
________执行语句
____else:
________执行语句
else:
____执行语句
超长行处理
方案一:换行处使用\ (\是pycharm自动添加的)
方案二:对整体内容使用 ()包裹起来,()中随意换行
循环变量控制循环执行次数
while 条件:
____执行语句
循环的终止和跳出
break:结束当前循环
continue:结束本轮循环
3、函数
函数格式一:
def 函数名():
文档注释(注释必须放在这里,ctrl键查看)
函数体
调用格式:
函数名()
定义格式二:
def 函数名(参数):
文档注释(注释必须放在这里,ctrl键查看)
函数体
调用格式:
函数名(参数)
定义格式三:
def 函数名(参数):
文档注释(注释必须放在这里,ctrl键查看)
函数体
return
调用格式:
变量 = 函数名(参数)
形参是函数定义时规定的参数,仅在函数体内有效
实参是函数调用时使用的参数,该值将传递给函数
实参和形参需要保持一一对应
变量的作用域
局部变量:函数内部定义的变量从定义位置开始到函数定义结束位置有效
全局变量:函数外部定义的变量在整个文件中有效
函数间不能共享内部定义的变量
函数内可以使用全局变量
如果局部变量与全局变量冲突,通过global关键字可以提升局部变量为全局变量,先声明再使用
4、面向对象
类的定义:
类是一系列事物的统称,同类事物必定具有相同的特征,类在日常生活中是看不到的
对象是一个类的具体表现形式,日常生活中看到的全是对象
定义格式一:
class 类名:
____pass
定义格式二:
class 类名:
____成员
创建对象格式:
变量名 = 类名()
成员变量定义与调用
定义格式一(常用):
class 类名:
____def init(self):
________self.变量名1 = 值1
________self.变量名2 = 值2
________self.变量名3 = None
________self.变量名4 = None
调用格式:
取值:对象名.变量名
赋值:对象名.变量名 = 值
定义格式二(不常用):
对象名.变量名 = 值(写在类的外部)
调用格式:
取值:对象名.变量名
赋值:对象名.变量名 = 值
声明变量:
在使用某个变量前,如果变量名不存在视为定义变量
在使用某个变量前,如果变量名存在视为调用变量
成员方法定义与调用
定义格式一:
class 类名:
____def 方法名(self):
________方法体
调用格式一:
对象名.方法名()
注意:
self仅在声明时占位,无需传递具体参数
定义格式二:
class 类名:
____def 方法名(self,形参1,形参2……):
________方法体
调用格式二:
对象名.方法名(实参1,实参2……)
魔术方法:
1、init()方法在创建对象时被运行,无需手工调用即可执行
2、str()方法定义格式:
def str(self):
return 打印对象时显示的信息字符串
成员方法中,访问类的成员变量,通过self.进行
5、三大特性
封装:通过封装,可以对类中设定访问保护的成员开放访问控制权限,达到保护数据不被非法访问的目的
封装定义格式
访问器(get方法):
def get_变量名 (self):
return __变量名
修改器(set方法):
def set_变量名 (self,形参):
self.__变量名 = 形参
方法也可以私有,也可以封装,通常不对方法做封装
私有方法定义格式:
def __方法名(self):
方法体
为__init__方法设置参数,可以在创建对象的时候直接为对象的属性赋值
类变量:
类变量定义时,前面不加self.,实例变量定义时,前面必须加self.
定义格式:
class 类名:
变量名 = 值
调用格式:
赋值:
类名.变量名 = 值
取值:
类名.变量名(推荐)
对象名.变量名(不推荐)
类方法:
定义格式:
class 类名:
@classmethod
def 方法名(cls, 形参):
方法体
调用格式:
类名.方法名(实参) (推荐)
对象名.方法名(实参) (不推荐)
类方法中不允许使用实例变量和实例方法
实例方法中允许使用类变量和类方法,推荐使用类名调用
静态方法:
定义格式:
class 类名:
@staticmethod
def 方法名(形参):
方法体
调用格式:
类名.方法名(实参) (推荐)
对象名.方法名(实参) (不推荐)
静态方法的定义与类无关,与对象无关,可以转化成函数定义
继承:
继承描述的是一种类间关系,一个类从另一个类获取成员信息的类间关系。
继承必定发生在两个类之间,参与继承关系的双方称为父类和子类。父类提供成员信息,子类获取成员信息。
子类可以在定义类的时候添加父类没有的成员
父类的私有成员不能被继承
通过__mro__查看一个类的所有继承关系
总结:
继承后子类拥有父类定义的成员(使用已经有的)
子类可以添加父类没有的成员(添加没有的)
父类可以控制不被子类继承的成员(设置不让用的)
重写:
重写是一种方法间关系,子类定义和父类同名的方法,称子类重写父类的方法
重写不产生新的语法格式,只需要定义的方法名与父类中的方法名同名
如果子类重写了父类的方法,使用子类对象调用方法时,就执行子类中重写的方法
所有类中书写__str__方法就是对object类中的__str__方法进行重写,作用是重新定义打印对象时显示的信息
重写关系中调用父类被覆盖的方法
在子类中调用父类被覆盖的方法的三种格式:
调用格式一:父类名.方法名(对象)
调用格式二:super(本类名,对象).方法名()
调用格式三:super().方法名() (推荐)
多继承:
一个类可以继承多个父类称为多继承
多继承可以使一个类获取到多个类的成员
多继承语法格式:class 类名(父类名1,父类名2,……):
在多继承中,为了明确子类调用哪个父类的方法,推荐调用方法使用格式: 父类名.方法名(self)
使用super().方法名()格式调用父类的方法时,依据子类.__mro__中的父类继承顺序进行查找,排在前面的优先被调用到
多态:
同一个对象,在不同的使用环境中以不同的形态展示其功能,称该对象具有多态特征。
多态发生在继承关系的基础之上
鸭子类型:
对象在语法层面满足调用关系,实际不具有对应的对象形态,称该对象此时具备鸭子类型
鸭子类型是一种特殊的多态表现形式
6、列表、元组、集合、字典和range
列表:
列表是一种存储大量数据的存储结构模型
列表整体是一个对象,保存有多个数据,使用索引来访问列表中的数据
创建列表:变量名 = [ 数据1,数据2,……]
列表数据访问:变量名[索引]
列表数据修改:变量名[索引] = 数据
列表数据遍历:for 循环变量 in 列表变量名:
元组:
创建元组:变量名 = ( 数据1,数据2,……)
元组数据访问:变量名[索引]
元组数据修改:非法操作(在创建数据时已经确认存储的数据不允许修改)
元组数据遍历: for 循环变量 in 元组变量名:
创建单个数据元组对象格式:(数据,)
元组数据修改
元组中的数据如果是非引用类型数据,不允许修改,例如数字、字符串
元组中的数据如果是引用类型对象,该对象不允许替换
元组中的数据如果是引用类型对象,对象的属性值可以发生改变
元组的应用:
自动组包:将多个数据自动包装成元组对象的过程;设置一个函数返回多个值使用自动组包
自动解包:将元组对象拆分成多个数据的过程;使用多个变量接收函数的多个返回值使用自动解包
自动组包与自动解包是理解性概念,无需手工操作
集合:
集合是无序的,无序指添加顺序与最终数据存储顺序不同
集合不能使用索引访问
集合中的数据不可重复,后添加的数据如与已经存在的数据重复,将不会添加到集合中
创建集合:变量名 = { 数据1,数据2,……}
集合数据访问:非法操作
集合数据修改:非法操作
集合数据遍历: for 循环变量 in 集合变量名:
创建空列表语法格式:[]
创建空元组语法格式:()
创建空集合语法格式:set()
{}表示的是创建其他存储对象
列表元组集合间格式转换:
将其它类型转换为列表使用list()函数
将其它类型转换为元素使用tuple()函数
将其它类型转换为集合使用set()函数
类型转换为列表以后就可以使用索引访问
类型转换为元组以后就不能再进行修改
类型转换为集合以后重复的数据会被删除
遇到数据去重操作
1.将数据保存到集合中或转换成集合
2.转换成原始的数据格式(例如:列表)
遇到数据修改限定操作
1.将数据保存到元祖中或转换成元组
遇到数据需要修改操作
1.将数据保存到列表中或转换成列表
2.修改数据
3.转换成原始的数据格式(例如:元组)
字典:
字典是使用名称(键)与实体(值)进行一一对应的数据存储机制
创建字典:变量名 = { 键1:值1,键2:值2,……}
变量名 = { }
字典数据访问:变量名[键]
字典数据修改:变量名[键] = 数据/值
字典数据遍历: for 键循环变量 in 字典变量名:
键的值设置名称推荐使用字符串、数字、元组
range:
range(开始值,结束值)
range(开始值,结束值,步长)
数据存储结构嵌套
数据存储结构嵌套是一个数据结构中嵌套了另外一个数据存储结构
嵌套的存储结构迭代时使用多层循环进行
7、公共语法
(1)公共函数:
容器的作用是存放数据
len()的作用:计算容器中数据数量
max()的作用:得到容器中的最大数据
min()的作用:得到容器中的最小数据
(2)切片:
作用:获取列表或元组中的局部数据
切片语法格式:
存储对象[开始索引:结束索引:步长]
特殊格式:
省略开始索引:默认开始索引为0
省略结束索引:默认结束索引为数据总量
省略步长: 每次递增索引数1
负数步长: 反向操作/反向步长操作
(需要开始索引、结束索引逆序排列)
(3)通用运算符
+:合并,连接
适用范围:列表、元祖
列表与元组间不可用“+”
*:重复连接
适用范围:列表、元祖
in:判断存在性
适用范围:列表、元祖、集合、字典key
not in:判断不存在性
适用范围:列表、元祖、集合、字典key
>、>=、==、<=、<:比较元素
(4)循环else语句
for…else语法格式:
for 变量名 in 可循环的对象:
变量相关操作
else:
循环结束后操作
while…else语法格式:
while 条件:
循环体
else:
循环结束后操作
break语句可以终止else的执行
(5)推导式
基础语法格式
循环变量 for循环
数据处理语法格式
表达式 for循环
数据过滤语法格式
表达式 for循环 if判断
字典推导式
key:value for循环 if判断
8、字符串
字符串(string)是用于保存字符信息的容器。
创建字符串语法格式:
str1 = “字符串信息”
str2 = ‘字符串信息’
str3 = 字符串信息(三个引号)
str4 = ‘’‘字符串信息’’’
字符串基本操作
字符串判断型操作
字符串数据转换型操作
字符串格式转换型操作
字符串拆分与连接操作
字符串查找与替换操作
字符串切片:
字符串切片标准格式
字符串[开始索引:结束索引]
字符串[开始索引:结束索引:步长]
9、参数
1、默认参数
默认参数语法格式
定义格式:
def 函数名(形参1 = 值1,…):
____函数体
……
调用格式一:
函数名(实参) 使用实参作为形参的值
调用格式二:
函数名() 使用默认值作为形参的值
参数格式混用一:
位置参数定义在前,默认参数定义在后
默认参数在调用传值时,按照位置参数进行对待,从左至右依次赋值,不能跳过左侧的某个参数直接为后面的参数赋值
默认参数作用:
减少函数/方法中大量反复的固定值的传参
为用户预留可操作的入口
2、关键字参数
关键字参数是在调用函数时为实参指定对应的形参变量名
关键字参数语法格式
定义格式(同普通参数定义,无特殊):
def 函数名(形参 ,…):
函数体
……
调用格式:
函数名( 形参名 = 实参)
参数格式混用:
关键字参数必须出现在位置参数的后面
不允许使用关键字参数对同一个形参进行多次赋值
关键字参数既可以为位置参数赋值,也可以为默认参数赋值。通常使用关键字参数解决默认参数选择性赋值问题
3、可变参数
定义格式:
def 函数名(*args ,…):
函数体
……
参数格式混用:
定义函数时各个参数的位置关系:
函数名(位置参数,可变参数,默认参数)
调用函数时:
位置参数通过对应位置传参
默认参数使用关键字参数指定名称传参
位置参数与默认参数之间的所有参数由关键字参数接收
可变参数在一个函数定义中只能出现一次
可变参数主要用于参数数量动态变化的函数定义
4、字典参数
标准语法格式:
定义格式:
def 函数名(**kwargs ,…):
函数体
……
调用格式:
函数名( 未定义变量名 = 实参,…… )
参数格式混用:
定义函数时各个参数的位置关系:
函数名(位置参数,可变参数,默认参数,字典参数)
调用函数时:
字典参数仅接收函数定义中未出现名称的关键字参数
字典参数在一个函数/方法定义中只能出现一次
5、递归函数
递归函数的函数体中具有对自身函数的调用
递归函数必须设置明确执行结束判定条件方可结束执行
Python语言中递归函数的调用最大层级是1000层(主函数main()占一层递归)
6、匿名函数
格式一:
定义: 函数名 = lambda 形参 : 返回值
调用: 结果 = 函数名(实参)
格式二:
定义并调用: 结果 = (lambda 形参 : 返回值)(实参)
匿名函数使用注意事项:
无参格式:
结果 = (lambda :返回值)()
多返回值格式:
无,可使用数据存储模型返回多个数据
无返回值格式:
无,必须有具体值或结果为None
10、引用
引用:
引用就是变量指向数据存储空间的现象
变量赋值修改的不是变量的值,修改的是变量的引用地址
每个数字在内存中都要占用一个存储空间,而变量存储的是这个空间的地址。
引用(列表):
只要列表有引用,就能找到对应的存储空间。
多个变量指向同一个引用,操作的是同一个地址中的数据。
不同的变量指向不同的引用,相互之间没有关系。
列表存储空间不足时,会申请新的存储空间,同时修改原始内存地址的引用。
注意修改的是内存地址而不是引用地址,内存地址对开发者是不可见的,
属于python内部的操作,对外呈现的引用地址是不变的。
引用(元组):
空元组(无数据)
空元组指向统一的独立引用地址,所有空元组共用同一个引用地址
非空元组(有数据)
非空元组保存在独立引用地址中,每个元组对象具有独立引用地址
引用(集合):
集合的引用与列表的引用非常相似
引用(字典):
字典的引用与列表的引用非常相似
引用(对象):
无变量引用:对象保存在临时引用地址中,该引用地址可以反复使用
有变量引用:对象保存在独立引用地址中,该引用地址专用,每个列表对象具有独立的引用地址,与列表的引用十分相似
可变类型与不可变类型:
数据存储空间中的数据可以发生变化的数据称为可变类型数据
数据存储空间中的数据不能发生变化的数据称为不可变类型数据
可变类型: 列表、集合、字典、对象
不可变类型: 数值、字符串、布尔、元组
函数实参类型:
函数的形参如果接收到的实参是不可变类型,函数内部的操作,不会对外部的实参产生影响
函数的形参如果接收到的实参是可变类型,函数内部的操作,会对外部的实参产生影响
满足下列三个条件,多次调用对应函数时,操作的形参是同一个对象
条件1:函数形参使用默认参数
条件2:函数调用时未对默认参数传值
条件3:函数的形参使用可变类型数据
对默认参数的值尽量不要使用可变类型的数据
11、new方法、del操作、is操作
new方法:
new()方法用于定义创建对象时执行的操作
__new__方法标准定义格式:
def new(cls, *args, **kwargs): # 用户自定义操作
instance = object.new(User)
return instance
定义__new__方法是对object类中__new__方法的重写,重写该方法时必须再次调用object类中的__new__方法
__new__方法在创建对象时自动运行,无需手工执行调用该方法
del操作:
del操作用于从内存中删除对应的变量,并断开变量与对应数据间的引用关系
元组对象的数据不支持del操作
del方法:
del()方法用于定义某个对象不被任何变量所引用时,该对象执行的操作
del()方法仅仅是python开放出来给用户干预删除对象时的一个操作入口,该方法并不是直接完成删除对象的操作,删除对象的操作由垃圾回收机制统一管理
当程序运行结束后,所有对象将被删除,此时将依次执行各个对象对应的del方法
is操作:
is操作用于判断两个数据或变量是否指向同样的内存地址
标准语法格式:
变量1 is 变量2
数据1 is 数据2
is与= =区别
==操作针对判定的内容不同,规则不同。例如数值性数据比较数值的大小,不考虑是整数还是小数。字符串比较字符串的内容是否相同,不考虑引用地址是否相同
is操作只针对地址进行判定,只要地址相同即返回True,否则返回False
12、单例模式
单例模式即控制类只能产生一个对象
定义的类变量要进行私有化,否则可以通过类名在类的外部访问到
对象的判空操作使用is进行判定
设计模式:
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)、访问者模式
13、文件操作
文件基本操作:
文件是计算机中数据持久化存储的表现形式
读写文件标准格式一:
1.打开文件
file = open(“文件名”,“读写模式”)
2.操作文件
*
3.关闭文件
file.close()
读写文件标准格式二(免关闭格式):
1.打开文件
with open(“文件名”,“读写模式”) as file:
2.操作文件
*
3.关闭文件(自动关闭文件)
文件操作完毕后必须关闭,否则将长期保持对文件的连接状态,造成内存溢出的现象发生
按照操作类型分为三大类:读、写、追加
按照每次读写数据的单位分为两大类:字符、字节
(读写单位:字符)
读写模式 功能 文件不存在 文件存在
r 读取一个文件的内容数据 报错 读取对应文件
w 对一个文件进行内容数据的写入 创建新文件写入内容 覆盖原始文件写入内容
a 对一个文件进行内容数据的追加 创建新文件写入内容 使用原始文件,写入内容到原始内容结尾处
(读写单位:字节)
读写模式 功能 文件不存在 文件存在
rb 读取一个文件的内容数据 报错 读取对应文件
wb 对一个文件进行内容数据的写入 创建新文件写入内容 覆盖原始文件写入内容
ab 对一个文件进行内容数据的追加 创建新文件写入内容 使用原始文件,写入内容到原始内容结尾处
读写模式 功能
r+ 基于字符单位的读写模式
w+ 基于字符单位的读写模式
a+ 基于字符单位的读写模式
rb+ 基于字节单位的读写模式
wb+ 基于字节单位的读写模式
ab+ 基于字节单位的读写模式
字节模式 参数 返回值 说明
read 无 文件中的所有字符信息 内存占用过大
read 数字 文件中指定数量字符信息 读取结束标志位读取到空字符信息
readline 无 文件中一行文字信息 一行文字以结束符为\n描述
readlines 无 文件中所有行信息对应的字符串列表 一行文字以结束符为\n描述
字节模式 参数 作用
write 字符串 将字符串内容写入文件
writelines 仅包含字符信息的存储模型(列表、元组、集合、字典键) 将存储模型中的字符信息写入文件并折行
(推荐:由纯文本编辑得到的文件读写使用字符模式,非纯文本编辑得到的文件读写使用字节模式)
字节模式>字符模式
文件路径:
文件在计算机中保存的位置称为文件的路径
文件的路径分为两种:相对路径、绝对路径
14、异常处理
异常处理:
异常是程序执行过程中出现的非正常流程现象
异常处理语法格式一:
try:
可能引发异常现象的代码
except:
出现异常现象的处理代
异常处理语法格式二:
try:
可能引发异常现象的代码
except :
出现异常现象的处理代码
finally:
try代码块结束后运行的代码
完整语法格式:
try:
可能引发异常现象的代码
except:
出现异常现象的处理代码
else:
未出现异常现象的处理代码
finally:
try代码块结束后运行的代码
捕获具体的异常:
except 异常类名:
出现异常现象的处理代码
捕获多个具体的异常:
except 异常类名1:
出现异常现象的处理代码
except 异常类名2:
出现异常现象的处理代码
except 异常类名3:
出现异常现象的处理代码
获取具体异常信息
except 异常类名 as 变量名:
出现异常现象的处理代码
抛出具体异常: raise 异常类名()
异常出现后如果没有被捕获处理,该异常将会继续向下传递,到下一次调用位置
自定义异常类
class 自定义异常类名(Exception):
pass
主动抛出异常现象
raise 异常类对象
模块中以下资源可以被外界使用:
1.类(定义)
2.函数
3.变量(全局)
模块的名称必须满足标识符命名规则
每一个独立的.py文件具有特定的功能,如果其功能需要被外界使用,该文件就构成了一个模块
全部导入格式:
import 模块名称
模块资源使用格式:
模块名.类名
模块名.函数名
模块名.变量名
局部导入格式:
from 模块名称 import 资源名称
from 模块名称 import 资源名称1,资源名称2
from 模块名称 import *
模块资源使用格式:
类名
函数名
变量名
后导入的资源根据名称覆盖先导入的资源
控制局部导入*资源数量
all = [“资源名称1”,“资源名称2”]
上述控制内容书写在模块文件中的第一行
包:
概念:包就是项目结构中的文件夹/目录
作用:包用于将不同的模块进行分类管理,包本身不具有具体的含义,仅用于文件分层管理
注意事项:放入包中的模块使用时需要在模块名前面添加包名,中间使用.分隔