目录
1.基本语法知识
1.1注释
1.2 PhCharm中的提示信息
1.3 算术运算
1.4 变量
1.5 字符串的运算
1.6 标准输入
1.7 格式化输出
1.8关系运算符
1.9条件语句
1.10循环语句
1.11函数
2.面向对象
2.1类的定义
2.2类的成员定义
2.3str
2.4 面向对象的封装特性
2.5继承
2.6类中的变量类型
3.模块
3.1模块的导入
3.2 创建模块
3.3模块的属性
4.异常类型
4.1Python内置异常
4.2自定义异常
4.3异常捕获
4.3.1捕获所以异常
4.3.2捕获制定异常
4.3.3捕获多个异常
4.4异常中的else
4.5 异常中的finally
4.6raise主动触发异常
5.文件操作
5.1文件操作的作用
5.2文件的基本操作
5.2.1打开文件
5.2.2写操作
5.2.3读操作
5.3文件夹操作
1.基本语法知识
1.1注释
#单行注释
"""
多行注释
"""
1.2 PhCharm中的提示信息
- 灰色波浪线:表示书写不规范
- 绿色波浪线:表示单词拼写可能存在问题
- 红色波浪线:语法检查
1.3 算术运算
#单行注释 """ 多行注释 """
1.2 PhCharm中的提示信息
- 灰色波浪线:表示书写不规范
- 绿色波浪线:表示单词拼写可能存在问题
- 红色波浪线:语法检查
1.3 算术运算
除了和平时其他语言相同的+,-,*,%以外:
- / 表示除法(不取整)
- // 表示整除
- ** 表示次方运算
注:乘法的优先级最高,+和-的优先级最低,但是我们可以使用()来提高运行的优先级及运算的顺序
1.4 变量
- 只能以数字,字母,下划线组成
- 不能以数字开头
- 不能是关键字
- 区分大小写
变量的类型分为数值型和非数值型,其中:
数值型包括:int,float,bool等
非数值类型包括:str字符串等等
我们可以使用type(变量名)来获取该变量类型
a = 10; print(type(t)); b = 15.6; print(type(t)); c = True; print(type(t)); d = "tmx520"; print(type(t));
输出结果:
1.5 字符串的运算
- 字符串可以使用*与数字相连,表示反复连接这个字符串
1.6 标准输入
使用**input()**来接收用户输入的信息,当执行到input()操作的时候,程序就会等待用户输入,而不向下执行
注:
- input操作得到的数据为字符串str类型的
- 可以使用int(),float()来进行格式的转换,但是注意int类型可以转换成float类型,但是float类型无法转成int类型
1.7 格式化输出
语法格式:
- print(变量)
- print(“格式化字符串” % 变量)
- print(“格式化字符串” % (变量1,变量2,…,变量n))
| %s | 字符串 |
| %d | 整数 |
| %f | 浮点数 |
1.8关系运算符
| and | 并且 |
| or | 或者 |
| not | 否 |
1.9条件语句
if 条件1:
执行代码
else if 条件2:
执行代码
else:
执行代码
1.10循环语句
for 变量名 in 数组/字符串/集合 :
代码
while 条件:
代码
1.11函数
def 函数名():
函数体
def 函数名(参数):
函数体内容
#调用函数时直接使用: 函数名(参数)
def 函数名(参数列表):
函数体
# 直接在这里添加返回值语句即可
return 函数需要返回的值
2.面向对象
2.1类的定义
class 类名:
def __init__(self):
self.变量名1 = 值1;
self.变量名2 = 值2;
self.变量名3 = 值3;
self.变量名4 = 值4;
2.2类的成员定义
class 类名:
def 方法名(self,形参1,形参2,...)
方法体
2.3str
def __str(self):
return "你需要显示的信息";
for 变量名 in 数组/字符串/集合 :
代码
while 条件:
代码
1.11函数
def 函数名():
函数体
def 函数名(参数):
函数体内容
#调用函数时直接使用: 函数名(参数)
def 函数名(参数列表):
函数体
# 直接在这里添加返回值语句即可
return 函数需要返回的值
2.面向对象
2.1类的定义
class 类名:
def __init__(self):
self.变量名1 = 值1;
self.变量名2 = 值2;
self.变量名3 = 值3;
self.变量名4 = 值4;
2.2类的成员定义
class 类名:
def 方法名(self,形参1,形参2,...)
方法体
2.3str
def __str(self):
return "你需要显示的信息";
2.1类的定义
class 类名:
def __init__(self):
self.变量名1 = 值1;
self.变量名2 = 值2;
self.变量名3 = 值3;
self.变量名4 = 值4;
2.2类的成员定义
class 类名:
def 方法名(self,形参1,形参2,...)
方法体
2.3str
def __str(self):
return "你需要显示的信息";
class 类名:
def 方法名(self,形参1,形参2,...)
方法体
2.3str
def __str(self):
return "你需要显示的信息";
str方法在使用print函数输出打印对象时被调用。
2.4 面向对象的封装特性
使用对成员变量私有化可以有效地保护从类的外部对类的内部成员进行访问
- 在定义变量是使用**___**表示
通过set和get方法进行私有变量的获取和值的设置
对受保护的变量进行私有设置
self.__变量名 = 值
提功对外访问器
访问器(get方法):
def get_变量名(self):
return self.__变量名;
访问器(set方法):
def set_变量名(self,形参):
self.__变量名 = 形参;
2.5继承
class 类名(父类1,父类2,....):
pass
注:
- 子类可以添加父类没有的成员
- 父类的私有成员不可以被继承
2.6类中的变量类型
全局变量:直接定义在py文件中,或者我们在一个类中,使用global声明的变量,则其为全局变量
**局部变量:**在方法中直接定义(没有使用self修饰的)为局部变量
公有变量:在init方法或者其他成员方法中使用self.进行定义的变量称为公有变量
独有变量:在我们的类中没有进行声明定义,在外部程序中添加了一个变量属性,称之为独有变量
私有变量:类的变量前使用**__**进行声明和定义
类变量:在类中直接定义的变量
class User:
country = "类变量"
__title = "类变量,私有变量"
def __init__(self):
self.name = "公有变量"
self.__age = "公有变量,私有变量"
info = "局部变量"
def test(self):
self.address = "公有变量"
email = "局部变量"
city = "全局变量"
u = User()
u.gender = "独有变量"
3.模块
3.1模块的导入
| 导入方式1 | 导入方式2 | |
| 模块的导入 | import 模块名1,模块名2.... | from 模块名 import 函数名 或:from 模块名 import * |
| 函数调用 | 模块名.函数名 | 函数名 |
3.2 创建模块
- Python模块对应于包含Python代码的源文件(其扩展名为.py),在文件中可以定义变量、函数和类;
- 在模块中,除了可以定义变量、函数和类之外,还可以包含一般的语句,称之为主块(全局语句)。当运行该模块,或导入该模块时,主块语句将依次进行。
- Python文件中的每个文件都可以做为一个模块存在,文件名即模块名。
3.3模块的属性
__all __ 属性:
__ all __变量控制模块里哪些功能可以使用*号导入
__ name __ 属性:
- 每个模块都有一个名称,通过特殊变量__name__可以获取模块的名称
- 特别的,当一个模块被用户单独运行,其__name__的值为’ __ main __ ’。故可以把模块源代码文件的测试代码写在相应的测试判断中,以保证只有单独运行时,才会运行测试代码
- 直接运行模块代码时,__ name __ 取值为 “ __ main __ ”
- 导入模块时,__ name __ 取值为模块名称
4.异常类型
4.1Python内置异常
BaseException # 所有异常的基类
+-- SystemExit # 解释器请求退出
+-- KeyboardInterrupt # 用户中断执行(通常是输入^C)
+-- GeneratorExit # 生成器(generator)发生异常来通知退出
+-- Exception # 常规异常的基类
+-- StopIteration # 迭代器没有更多的值
+-- StopAsyncIteration # 必须通过异步迭代器对象的__anext__()方法引发以停止迭代
+-- ArithmeticError # 各种算术错误引发的内置异常的基类
| +-- FloatingPointError # 浮点计算错误
| +-- OverflowError # 数值运算结果太大无法表示
| +-- ZeroDivisionError # 除(或取模)零 (所有数据类型)
+-- AssertionError # 当assert语句失败时引发
+-- AttributeError # 属性引用或赋值失败
+-- BufferError # 无法执行与缓冲区相关的操作时引发
+-- EOFError # 当input()函数在没有读取任何数据的情况下达到文件结束条件(EOF)时引发
+-- ImportError # 导入模块/对象失败
| +-- ModuleNotFoundError # 无法找到模块或在在sys.modules中找到None
+-- LookupError # 映射或序列上使用的键或索引无效时引发的异常的基类
| +-- IndexError # 序列中没有此索引(index)
| +-- KeyError # 映射中没有这个键
+-- MemoryError # 内存溢出错误(对于Python 解释器不是致命的)
+-- NameError # 未声明/初始化对象 (没有属性)
| +-- UnboundLocalError # 访问未初始化的本地变量
+-- OSError # 操作系统错误,EnvironmentError,IOError,WindowsError,socket.error,select.error和mmap.error已合并到OSError中,构造函数可能返回子类
| +-- BlockingIOError # 操作将阻塞对象(e.g. socket)设置为非阻塞操作
| +-- ChildProcessError # 在子进程上的操作失败
| +-- ConnectionError # 与连接相关的异常的基类
| | +-- BrokenPipeError # 另一端关闭时尝试写入管道或试图在已关闭写入的套接字上写入
| | +-- ConnectionAbortedError # 连接尝试被对等方中止
| | +-- ConnectionRefusedError # 连接尝试被对等方拒绝
| | +-- ConnectionResetError # 连接由对等方重置
| +-- FileExistsError # 创建已存在的文件或目录
| +-- FileNotFoundError # 请求不存在的文件或目录
| +-- InterruptedError # 系统调用被输入信号中断
| +-- IsADirectoryError # 在目录上请求文件操作(例如 os.remove())
| +-- NotADirectoryError # 在不是目录的事物上请求目录操作(例如 os.listdir())
| +-- PermissionError # 尝试在没有足够访问权限的情况下运行操作
| +-- ProcessLookupError # 给定进程不存在
| +-- TimeoutError # 系统函数在系统级别超时
+-- ReferenceError # weakref.proxy()函数创建的弱引用试图访问已经垃圾回收了的对象
+-- RuntimeError # 在检测到不属于任何其他类别的错误时触发
| +-- NotImplementedError # 在用户定义的基类中,抽象方法要求派生类重写该方法或者正在开发的类指示仍然需要添加实际实现
| +-- RecursionError # 解释器检测到超出最大递归深度
+-- SyntaxError # Python 语法错误
| +-- IndentationError # 缩进错误
| +-- TabError # Tab和空格混用
+-- SystemError # 解释器发现内部错误
+-- TypeError # 操作或函数应用于不适当类型的对象
+-- ValueError # 操作或函数接收到具有正确类型但值不合适的参数
| +-- UnicodeError # 发生与Unicode相关的编码或解码错误
| +-- UnicodeDecodeError # Unicode解码错误
| +-- UnicodeEncodeError # Unicode编码错误
| +-- UnicodeTranslateError # Unicode转码错误
+-- Warning # 警告的基类
+-- DeprecationWarning # 有关已弃用功能的警告的基类
+-- PendingDeprecationWarning # 有关不推荐使用功能的警告的基类
+-- RuntimeWarning # 有关可疑的运行时行为的警告的基类
+-- SyntaxWarning # 关于可疑语法警告的基类
+-- UserWarning # 用户代码生成警告的基类
+-- FutureWarning # 有关已弃用功能的警告的基类
+-- ImportWarning # 关于模块导入时可能出错的警告的基类
+-- UnicodeWarning # 与Unicode相关的警告的基类
+-- BytesWarning # 与bytes和bytearray相关的警告的基类
+-- ResourceWarning # 与资源使用相关的警告的基类。被默认警告过滤器忽略。
BaseException # 所有异常的基类
+-- SystemExit # 解释器请求退出
+-- KeyboardInterrupt # 用户中断执行(通常是输入^C)
+-- GeneratorExit # 生成器(generator)发生异常来通知退出
+-- Exception # 常规异常的基类
+-- StopIteration # 迭代器没有更多的值
+-- StopAsyncIteration # 必须通过异步迭代器对象的__anext__()方法引发以停止迭代
+-- ArithmeticError # 各种算术错误引发的内置异常的基类
| +-- FloatingPointError # 浮点计算错误
| +-- OverflowError # 数值运算结果太大无法表示
| +-- ZeroDivisionError # 除(或取模)零 (所有数据类型)
+-- AssertionError # 当assert语句失败时引发
+-- AttributeError # 属性引用或赋值失败
+-- BufferError # 无法执行与缓冲区相关的操作时引发
+-- EOFError # 当input()函数在没有读取任何数据的情况下达到文件结束条件(EOF)时引发
+-- ImportError # 导入模块/对象失败
| +-- ModuleNotFoundError # 无法找到模块或在在sys.modules中找到None
+-- LookupError # 映射或序列上使用的键或索引无效时引发的异常的基类
| +-- IndexError # 序列中没有此索引(index)
| +-- KeyError # 映射中没有这个键
+-- MemoryError # 内存溢出错误(对于Python 解释器不是致命的)
+-- NameError # 未声明/初始化对象 (没有属性)
| +-- UnboundLocalError # 访问未初始化的本地变量
+-- OSError # 操作系统错误,EnvironmentError,IOError,WindowsError,socket.error,select.error和mmap.error已合并到OSError中,构造函数可能返回子类
| +-- BlockingIOError # 操作将阻塞对象(e.g. socket)设置为非阻塞操作
| +-- ChildProcessError # 在子进程上的操作失败
| +-- ConnectionError # 与连接相关的异常的基类
| | +-- BrokenPipeError # 另一端关闭时尝试写入管道或试图在已关闭写入的套接字上写入
| | +-- ConnectionAbortedError # 连接尝试被对等方中止
| | +-- ConnectionRefusedError # 连接尝试被对等方拒绝
| | +-- ConnectionResetError # 连接由对等方重置
| +-- FileExistsError # 创建已存在的文件或目录
| +-- FileNotFoundError # 请求不存在的文件或目录
| +-- InterruptedError # 系统调用被输入信号中断
| +-- IsADirectoryError # 在目录上请求文件操作(例如 os.remove())
| +-- NotADirectoryError # 在不是目录的事物上请求目录操作(例如 os.listdir())
| +-- PermissionError # 尝试在没有足够访问权限的情况下运行操作
| +-- ProcessLookupError # 给定进程不存在
| +-- TimeoutError # 系统函数在系统级别超时
+-- ReferenceError # weakref.proxy()函数创建的弱引用试图访问已经垃圾回收了的对象
+-- RuntimeError # 在检测到不属于任何其他类别的错误时触发
| +-- NotImplementedError # 在用户定义的基类中,抽象方法要求派生类重写该方法或者正在开发的类指示仍然需要添加实际实现
| +-- RecursionError # 解释器检测到超出最大递归深度
+-- SyntaxError # Python 语法错误
| +-- IndentationError # 缩进错误
| +-- TabError # Tab和空格混用
+-- SystemError # 解释器发现内部错误
+-- TypeError # 操作或函数应用于不适当类型的对象
+-- ValueError # 操作或函数接收到具有正确类型但值不合适的参数
| +-- UnicodeError # 发生与Unicode相关的编码或解码错误
| +-- UnicodeDecodeError # Unicode解码错误
| +-- UnicodeEncodeError # Unicode编码错误
| +-- UnicodeTranslateError # Unicode转码错误
+-- Warning # 警告的基类
+-- DeprecationWarning # 有关已弃用功能的警告的基类
+-- PendingDeprecationWarning # 有关不推荐使用功能的警告的基类
+-- RuntimeWarning # 有关可疑的运行时行为的警告的基类
+-- SyntaxWarning # 关于可疑语法警告的基类
+-- UserWarning # 用户代码生成警告的基类
+-- FutureWarning # 有关已弃用功能的警告的基类
+-- ImportWarning # 关于模块导入时可能出错的警告的基类
+-- UnicodeWarning # 与Unicode相关的警告的基类
+-- BytesWarning # 与bytes和bytearray相关的警告的基类
+-- ResourceWarning # 与资源使用相关的警告的基类。被默认警告过滤器忽略。
详细说明请参考:Built-in Exceptions — Python 3.10.4 documentationhttps://docs.python.org/3/library/exceptions.html#base-classes
4.2自定义异常
可以通过创建一个新的异常类拥有自己的异常,异常应该是通过直接或间接的方式继承自Exception类。下面创建了一个MyError类,基类为Exception,用于在异常触发时输出更多的信息。
在try语句块中,抛出用户自定义的异常后执行except部分,变量 e 是用于创建MyError类的实例。
class MyError(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return self.msg
try:
raise MyError('类型错误')
except MyError as e:
print('My exception occurred', e.msg)
4.3异常捕获
| 关键字 | 说明 |
| try/except | 捕获异常并处理 |
| pass | 忽略异常 |
| as | 定义异常实例(except MyError as e) |
| else | 如果try中的语句没有引发异常,则执行else中的语句 |
| finally | 无论是否出现异常,都执行的代码 |
| raise | 抛出/引发异常 |
4.3.1捕获所以异常
包括键盘中断和程序退出请求(用sys.exit()就无法退出程序了,因为异常被捕获了),因此慎用。
try:
<语句>
except:
print('异常说明')
4.3.2捕获制定异常
try:
<语句>
except <异常名>:
print('异常说明')
//万能异常
try:
<语句>
except Exception:
print('异常说明')
4.3.3捕获多个异常
第一种:同时捕获多个异常,不区分优先级。
try:
<语句>
except (<异常名1>, <异常名2>, ...):
print('异常说明')
第二种:同时捕获多个异常,区分优先级。
try:
<语句>
except <异常名1>:
print('异常说明1')
except <异常名2>:
print('异常说明2')
except <异常名3>:
print('异常说明3')
4.4异常中的else
如果判断完没有某些异常之后还想做其他事,就可以使用下面这样的else语句。
try:
<语句>
except <异常名1>:
print('异常说明1')
except <异常名2>:
print('异常说明2')
else:
<语句> # try语句中没有异常则执行此段代码
4.5 异常中的finally
try...finally...语句无论是否发生异常都将会执行最后的代码。
try:
<语句>
finally:
<语句>
4.6raise主动触发异常
可以使用raise语句自己触发异常,raise语法格式如下:
raise [Exception [, args [, traceback]]]
语句中Exception是异常的类型(例如ValueError),参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None"。最后一个参数是跟踪异常对象,也是可选的(在实践中很少使用)。
5.文件操作
5.1文件操作的作用
⽂件操作的作⽤就是把⼀些内容(数据)存储存放起来,可以让程序下⼀次执⾏的时候直接使⽤,⽽不必重新制作⼀份,省时省⼒
5.2文件的基本操作
5.2.1打开文件
在python,使⽤open函数,可以打开⼀个已经存在的⽂件,或者创建⼀个新⽂件
语法:open(name, mode)
name:是要打开的⽬标⽂件名的字符串(可以包含⽂件所在的具体路径)。
mode:设置打开⽂件的模式(访问模式):只读、写⼊、追加等
mode的分类:
| mode类型 | 说明 |
| r | 以只读⽅式打开⽂件。⽂件的指针将会放在⽂件的开头。这是默认模式。 |
| rb | 以⼆进制格式打开⼀个⽂件⽤于只读。⽂件指针将会放在⽂件的开头。这是默认模式. |
| r+ | 打开⼀个⽂件⽤于读写。⽂件指针将会放在⽂件的开头。 |
| rb+ | 以⼆进制格式打开⼀个⽂件⽤于读写。⽂件指针将会放在⽂件的开头。 |
| w | 打开⼀个⽂件只⽤于写⼊。如果该⽂件已存在则打开⽂件,并从开头开始编辑,即原有内容会被删除。如果该⽂件不存在,创建新⽂件。 |
| wb | 以⼆进制格式打开⼀个⽂件只⽤于写⼊。如果该⽂件已存在则打开⽂件,并从开头开始编辑,即原有内容会被删除。如果该⽂件不存在,创建新⽂件。 |
| w+ | 打开⼀个⽂件⽤于读写。如果该⽂件已存在则打开⽂件,并从开头开始编辑,即原有内容会被删除。如果该⽂件不存在,创建新⽂件。 |
| wb+ | 以⼆进制格式打开⼀个⽂件⽤于读写。如果该⽂件已存在则打开⽂件,并从开头开始编辑,即原有内容会被删除。如果该⽂件不存在,创建新⽂件。 |
| a | 打开⼀个⽂件⽤于追加。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。也就是说,新的内容将会被写⼊到已有内容之后。如果该⽂件不存在,创建新⽂件进⾏写⼊。 |
| ab | 以⼆进制格式打开⼀个⽂件⽤于追加。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。也就是说,新的内容将会被写⼊到已有内容之后。如果该⽂件不存在,创建新⽂件进⾏写⼊。 |
| a+ | 打开⼀个⽂件⽤于读写。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。⽂件打开时会是追加模式。如果该⽂件不存在,创建新⽂件⽤于读写。 |
| ab+ | 以⼆进制格式打开⼀个⽂件⽤于追加。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。如果该⽂件不存在,创建新⽂件⽤于读写 |
示例:
f=open('test.txt','w')#打开文件test.txt并进行读操作
#注意:此时的 f 是 open 函数的⽂件对象
5.2.2写操作
语法:对象.write('内容‘)
示例:
f=open('test.txt','w')
#打开文件
f.write('hello wrld')
#对文件执行写操作
f.close
#关闭文件,这一步是必不可少的
注:
1. w 和 a 模式:如果⽂件不存在则创建该⽂件;如果⽂件存在, w 模式先清空再写⼊, a 模式直接末尾追加。
2. r 模式:如果⽂件不存在则报错
5.2.3读操作
语法:⽂件对象.read(num)
示例:
f=open('test.txt')
con=f.read()
print(con)
f.close#此时必须加这个关闭文件的命令
注:
num表示要从⽂件中读取的数据的⻓度(单位是字节),如果没有传⼊num,那么就表示读取⽂件中所有的数据
补充:
语法:readlines()
解释:readlines可以按照⾏的⽅式把整个⽂件中的内容进⾏⼀次性读取,并且返回的是⼀个列表,其中每⼀⾏的数据为⼀个元素。
示例:
f = open('test.txt')
content = f.readlines()
print(content)#此时返回的是一个列表,一个数据为文件中的一行数据
# 关闭⽂件
f.close()
语法:readline()
解释:一次读取一行数据
f=open('test.txt')
first_line=f.readline()
print(f'第一行数据是:{first_line}')
second_line=f.readline()
print(f'第二行的数据是:{second_line}')
f.close#关闭文件
语法;⽂件对象.seek(偏移量, 起始位置)
解释:移动指针
起始位置:
- 0:⽂件开头
- 1:当前位置
- 2:⽂件结尾
5.3文件夹操作
在Python中⽂件和⽂件夹的操作要借助os模块⾥⾯的相关功能,具体如下:
1导入os模块(import os)
2.使用os模块里的函数(os.函数名())
1)文件重命名
os.rename(⽬标⽂件名, 新⽂件名)
2)删除文件
os.remove(⽬标⽂件名)
3)创建文件夹
os.mkdir(⽂件夹名字)
4)删除文件夹
os.rmdir(⽂件夹名字)
5)获取当前目录
os.getcwd()
6)改变默认目录
os.chdir(⽬录)
7)获取目录列表
os.listdir(⽬录)
持续更新中.....



