来源引用网络知识与某站曹老师视频相互结合学习记录,仅供参考!
Python 基础知识
类型注解
类型注解的概念
类型注解(Type Hints) 是一种为代码添加"说明标签"的技术,明确地指出变量、函数参数和返回值应该是什么数据类型;就是在代码中为变量、函数参数及返回值等添加类型信息的一种方式;这并不是强制性的,Python依然保持着动态类型的特性,但通过类型提示(Type Hints) ,开发者可以明确地表达出预期的数据类型。简单来说就是“在代码中注明数据类型的语法,在代码中涉及数据交互的地方,提供数据类型的注解(显示说明)”。
主要功能:
- 帮助第三方 IDE(PyCharm)工具对代码进行类型推断,协助做代码提示;
- 帮助开发者自身对变量进行类型注释;
核心目的
- 提高代码可读性:让他人(以及未来的你)一眼就能看懂代码的意图;
- 便于静态检查:在运行代码前,通过工具发现潜在的类型错误;
- 增强IDE支持:让代码编辑器提供更准确的自动补全和提示;
为什么需要类型注解?
Python 以其动态类型特性而闻名——不需要提前声明变量的类型,解释器会在运行时自动推断。
这虽然灵活,但也带来了问题:
类型注解通过提供可选的类型信息来解决这些问题,让代码更加健壮和可维护。类型注解一般用于看不出变量的类型,只是备注,不会影响到代码运行。
|
常见类型(部分) |
描述 |
|
|
str |
字符串类型。 |
|
|
int |
整数类型。 |
|
|
float |
浮点数类型。 |
|
|
bool |
布尔类型。 |
|
|
List |
列表类型。 |
|
|
Dict |
字典类型。 |
|
|
Set |
集合类型。 |
|
|
Tuple |
元组类型。 |
|
|
Union |
联合类型,是一个变量的值可以是多个类型。 |
|
|
Optional |
可选类型,当值可能是某种类型或者是 None 使用 。 |
|
|
Any |
Any 是一种特殊的类型,可以为任意类型。 |
|
变量的类型注解
从 Python 3.6 版本开始,可以直接为变量添加类型注解;变量类型注解是在变量后面加上“ : 类型 ”;
像这样注解完成后,运行不会报错,给提示和注释作用;
例如有下面的一些变量定义:
# 导包
import random
# 注解为字符串 (str)– “name: str” 读作"变量 name 的类型是 str"
name: str = "ZhangSan"
# 注解为整型 (int)
age: int = 20
# 注解为布尔值 (bool)
b: bool = True
# 类对象–类型注解
class Person:
pass
# 实例对象类型注解–给‘lisi’这个对象指定为“Person”类型
lisi: Person = Person()
# 基础容器–类型注解
my_list: list = [1, 2, 3, 4]
my_tuple: tuple = (1, 2, "ZhangSan", 'LiSi', False)
my_dict: dict = {1: 'a', 2: 'b', 3: 'c'}
my_set: set = {1, 2, 3, 4}
# 容器类型元素–类型注解
# 表示这是一个只包含整数的列表
my_list2: list[int] = [1, 2, 3, 4]
# 元组需要将每一个元素都标记出来–表示这是一个包含整数、字符串、布尔值的元组
my_tuple2: tuple[int, int, str, str, bool] = (1, 2, "ZhangSan", 'LiSi', False)
# 字典需要2个类型,一个是key,一个是value–表示这是一个键为字符串、值为浮点数的字典
my_dict2: dict[str, float] = {"a": 1.23, "b": 2.34}
# 表示这是一个键为整数、值为字符串的字典
my_dict3: dict[int, str] = {1: 'a', 2: 'b', 3: 'c'}
# 表示这是一个只包含字符串的集合
my_set2: set[str] = {"a", "b", "c"}
# 在注释中进行类型注解–在注释里面添加类型注解 “# type:类型"
name1 = "WangWu" # type:str
my_list3 = [1, 2, 3, 4] # type:list[int]
r1 = random.randint(1, 100) # type:int
函数方法的类型注解
在函数参数后加“ : 类型 ”。函数注解是类型注解最常见的应用场景。
形参类型注解
def 函数方法名(形参名1: 类型, 形参名2: 类型, ……, 形参名N: 类型)
pass
# 自定义一个添加方法add–形参a应该是整型,形参b应该是整型
def add(a: int, b: int):
# 返回结果
return a + b
# 直接打印调用结果
print(add(1, 2))
返回值类型注解
def 函数方法名(形参名1: 类型, 形参名2: 类型, ……, 形参名N: 类型) -> 返回值类型:
pass
“形参名1: 类型”–表示 参数(形参名)应该是 某类型(设置类型);
“-> 返回值类型: ”–表示此函数执行后返回一个 某类型(自定义设置的类型);
# 自定义方法–指定形参类型并指定返回值类型
def add(a: int, b: int) -> int:
# 返回值“a + b”结果应该是整型
return a + b
# 直接打印调用结果
print(add(1, 2))
联合类型(Union)注解
假如存在多个值 (value)类型不一致,当值 (value) 可能是多种类型之一,可以通过 Union 联合类型注解,来实现多类型注解;多个类型之间使用竖线 | 分割(简写);在变量注解、函数(方法)形参和返回值注解中,均可使用;

基本语法
变量、函数方法、返回值后加“ : Union[类型1, 类型2,……, 类型N] ”
# 导包–若需要使用Union类型注解,务必需要先引入 Union 联合类型依赖
from typing import Union
Union[类型1, 类型2,……, 类型N]
以下示例可供测试参考学习;
# 导包–若需要使用Union类型注解,务必需要先引入 Union 联合类型依赖
from typing import Union
# 变量name可以是整型或者浮点型或者字符串类型或者为None
name: Union[int, float, str, None] = 18
# 列表list1是列表(list)类型,里面的元素(value)值可能是整型、字符串、浮点型、布尔类型
list1: list[Union[int, str, float, bool]] = [1, "ZhangSsan", 'lisi', 3.1415926, False]
list2: list[Union[int | str | float | bool]] = [1, "ZhangSsan", 'lisi', 3.1415926, False]
# 元组需要将每一个元素都标记出来
tuple1: tuple[int, float, str, str, bool] = (1, 3.14, "ZhangSan", 'LiSi', False)
# 常用面向对象方式–使用tuple()对象方式定义空元组
tuple2: tuple[Union[int, float, str, bool]] = tuple()
tuple3: tuple[Union[int | str | float , bool]] = tuple()
# 字典dict1是字典(dict)类型,里面key值是字符串类型,value值可以是整型、浮点型、布尔类型
dict1: dict[str, Union[int, float, bool]] = {"a": 100, "b": 3.14159, "c": False}
# 集合set1是字典(set)类型,里面元素可以是整型、浮点型、布尔类型
set1: set[Union[int, float, bool]] = {"a", True, 3.14}
# 定义add方法–参数a可以是整型或者浮点型,参数b可以是整型或者浮点型;返回值可以是整型或者浮点型
def add(a: Union[int, float], b: Union[int, float]) -> Union[int, float]:
# 函数返回值可以是整型或者浮点型
return a + b
print(add(1, 2))
代码断点调试
基于 PyCharm 工具断点调试
PyCharm Debug(断点调试)可以帮助开发者在代码运行时进行实时的调试和错误排查(主要是排错用的),提高代码开发效率和代码质量。
建议可参考:PyCharm 运行与调试、PyCharm 界面说明
如果遇到错误,不使用 Debug 方法,以前使用输出语句的话,效率会比较低;
准备一段测试代码:
# 定义
def add(a, b):
return a + b
if __name__ == '__main__':
# 遍历
for i in range(1, 5):
# 返回
result = add(i, i + 1)
# 打印
print("result {}".format(result))

假如说需要查看代码里面的执行过程,这时可以使用 Debug ;
第一步:放置断点
例如:需要查看”result = add(i, i + 1)“ 里面执行过程的数据;
打断点,在想要放置断点的位置(地方,所在代码行前)鼠标左键单击(再次点击则取消);点击后会出现一个实心的圆点,此刻表示断点已经放置成功。

鼠标光标移动到某代码行号(行数)前时会出现透明红色圆点;

实际整个红色方框内都能触发断点圆点;

第二步:启动 Debug 调试
启动 debug 的方式方法
快捷键: Shift + F9
方法一:点击”main“ 函数旁边的绿色三角图标,然后选择”调式(”Debug'debug'“ )“,即可进入 Debug 模式;

方法二:选择需要”Debug“ 的文件,再点击工具栏的 🐞 调试 按钮;一般这种方法使用的最多,或者使用快捷键( shift+F9 )方式;


方法三:在代码空白处鼠标右键→选择”Debug“

调试界面详解
断点调试的意思就是程序在执行到”打断点“位置时,暂时挂起(可以理解为是等待)此时可以看到之前运行程序的一些变量参数等信息;启动调试后会在下方出现调试控制台界面;

|
|
||
|
操作 |
描述 |
|
|
重新运行 Ctrl+F5 |
重新 debug 运行代码。 |
|
|
停止 Ctrl+F2 |
停止运行,程序终止,终止调试会话;找到错误原因就停止程序。 |
|
|
恢复程序 F9 |
继续运行直到下一个断点处,若没有下一个断点,则程序执行结束。 |
|
|
暂停程序 |
暂时停止运行代码,暂停。 |
|
|
步过 F8 |
顺着代码逐行运行,执行当前行,不会进入函数内部方法; 单步执行,一行一行的代码往下执行(最重要的,单步执行)。 |
|
|
步入 F7 |
进入函数内部调试,进入方法,可进入库类;在单步执行时,遇到子函数就进入并且继续单步执行,有的会跳到源代码里面去执行。步过不会进入当前执行的方法,但是这个方法会进入到方法里面。 |
|
|
单步执行 Alt+Shift+F7 |
在单步执行时,遇到子函数就进入并继续单步执行。 |
|
|
步出 Shift+F8 |
执行完当前函数,返回到调用处;跳出当前方法;假如进入了函数体中,看了两行代码,突然不想看了,或者觉得没啥问题时,可以使用步出,返回到跳转处的下一行;跳出当前函数体内,返回到调用此函数的地方,即使用此功能。 |
|
|
查看断点 Ctrl+Shift+F8 |
显示当前所有断点位置。 |
|
|
忽略断点 |
忽略所有断点。 |
|
|
更多 |
|
|
未完待续……
网硕互联帮助中心





评论前必须登录!
注册