变量和类型
从CPU执行的角度--汇编语言
编程具体到物理层--指令区 & 变量区
CPU 可以根据某些寄存器上存的数据找到内存上的区域,并进行读写操作
CPU 访问内存时需要的是地址,而不是变量名和函数名!
变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。
编译和链接过程的一项重要任务就是找到这些名称所对应的地址。
按照数学方式来描述计算过程,可以没有变量-计算机硬件不能像数学家描述的理想情况一样理想化
高级语言也要迁就于机器语言,一块内存要反复用-充分利用硬件资源
随着科技发展-比如量子计算机应用等可能描述方式就会发生时代性的改变
变量类型 --类型系统
是什么数据,它占用多长的空间, 可以进行什么样的操作 变量的类型定义了这个变量所能够支持的操作的集合
类型约束-类型多态--类型组合
1、根据类型安排合适的操作 2、借助类型系统发现部分逻辑错误
关键在于编译出正确的二进制文件--怎么编译出正确的二进制文件呢-字节序列 (施加约束)对数据进行信息抽象的定义-量纲分析
定长数据-变长数据
定长数据 不同的种类--类型。
变长数据 动态分配问题
静态区,一个变量一旦存上去了,它的前方后方都紧靠着别的数据,大家的位置都是固定的,长度也是固定的,程序也依赖于这些数据的固定性来找到和处理它们
类型是值的抽象域
数据结构
数据类型: 单个数据元素的属性和处理(如数据的大小、范围)
数据结构: 数据元素的整体组织和操作(如元素之间的关系)
数据结构是一种存储和组织数据的方式,旨在提高数据访问和修改的效率。
它主要关注数据元素之间的关系和布局,以及如何高效地处理这些数据
数据格式
数据如何被存储、读取和交换
上下文 (context)
执行顺序---顺序执行-选择执行-条件分支-循环执行- 本质就是 PC 值的变化,PC 值永远存储的是即将运行的下一条指令的地址
-函数也是一种执行顺序--跳转,和单纯的跳转不同
函数调用需要在完成函数内部的处理之后,
处理流程再返回到函数调用点,也就是返回到函数调用指令的下一条指令,因此针对于函数调用来讲,涉及到函数返回地址的处理
函数返回地址进行压栈-堆栈的机制,堆栈的特性是先入后出
函数的调用机制
上下文切换(context switch)定 上下文切换指的是内核(操作系统的核心)在CPU上对进程或者线程进行切换
包括处理器的寄存器状态、程序计数器、堆栈指针、内存管理信息以及其他任务特定的数据
Thread Context
函数上下文 --作用域 闭包 Closure
函数所在的 scope-当前正在运行的函数所在的范围。它是一个包含了函数参数和本地变量的环境,函数在执行时会使用这个环境中的变量
变量环境-词法环境等
作用域上下文定义了变量的可见性和生命周期
安全上下文(Security Context) 上下文可能包含用户认证信息、权限和角色等。
网络请求上下 上下文可能包含请求和响应的详细信息,如HTTP头部、请求体、状态码等
Environment
python上下文
上下文管理器是资源管理的绝佳
类的 with 语句,我们必须实现 __enter__ 和 __exit__ 方法。
当执行进入 with 语句的上下文时,Python调用 __enter__。 在这里,应该获取资源并将其返回。
当执行再次离开上下文时,将调用 __exit__ 并释放资源。
如果执行发生异常,Python将类型,值和回溯传递给 __exit__ 方法。 它可以在这里处理异常
Contextlib库是其中之一,它提供了一些用于支持上下文管理协议(即with语句)的函数。
contextmanager 装饰器
closing 函数 是一个帮助函数,用来确保对象的close方法在完成后被正确的调用。
contextlib.contextmanager 装饰器对其进行装饰。
然后,我们也可以使用 with 语句调用该函数。
对于这种方法,函数必须在 try 语句中 yield 资源,
并且释放资源的 __exit__ 方法的所有内容现在都在相应的 finally 语句内
深拷贝和浅拷贝
别名是指给对象赋予一个新的名称,操作别名实际上是在操作同一个对象;
而深层复制和浅复制是创建新的对象。浅复制只复制了原始对象的引用。
浅拷贝和深拷贝更多地涉及到涉及到指针成员的对象的拷贝行为,而对于普通变量,只需要关注其值的复制即可。
别名(Alias):在Python中,可以通过给对象赋予一个新的名称来创建别名
浅拷贝 Shallow Copy
浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。
如果属性是基本类型,拷贝的就是基本类型的值,
如果属性是引用类型,拷贝的就是内存地址 ,
所以如果其中一个对象改变了这个地址,就会影响到另一个对象。
新旧对象还是共享同一块内存
深拷贝 Deep Copy
深拷贝是将一个对象从内存中完整的拷贝一份出来,
从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象
深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象
调试和测试
调试
非侵入式调试
侵入式调试:
命令行的方式 -非侵入式调试
python -m pdb main.py
b/break 命令来设置断点
cl/clear 命令来清除断点
p 命令来查看变量的值
Python的调试器 pdb.set_trace()
import pdb
###调试的方式
设置断点、调试控制
开始/暂停、步过 (Step Over)、步入 (Step Into)、步出 (Step Out)、重新开始和停止调试会话。
图形化界面的方式
1.设置断点 代码中设置断点,只需单击左侧行号边上的空格。标有红点的行是断点,程序运行到这里会暂停,允许你检查变量状态、步进代码
2.Start Debugging
最上方出现的调试工具栏让你可以执行常规的调试操作,如开始/暂停、步过 (Step Over)、步入 (Step Into)、步出 (Step Out)、
追踪
import traceback
单元测试
mock已经被集成到了unittest单元测试框架中,所以可以直接使用。在代码中直接import进来就可以使用mock了。
from unittest import mock
使用一个替身对象来模拟它,然后使用断言来确认结果
异常处理和错误处理
vscode
terminal
debug console
problems
output
outline
timeline
可观测性
监控方案
可观测性主要从日志(Log)、指标(Metric)和追踪(Trace)
指标是对系统和应用程序性能进行量化的数值数据
追踪记录和分析服务间调用的过程,帮助理解请求在系统中的传递路径和延迟,
对于分布式系统中性能问题的诊断和解决尤为重要
Log是离散的事件,Trace可以认为是带请求追踪的事件,Metric是带统计量的事件
参考
Python 进阶 https://python-advanced.qiwihui.com/zh-cn/latest/index.html
https://www.python-engineer.com/courses/advancedpython/01-lists/
https://python3-cookbook.readthedocs.io/zh-cn/latest
标签:__,函数,Python,别名,对象,拷贝,上下文,变量
From: https://www.cnblogs.com/ytwang/p/18573892