如何让oppo5不卡33A手机在运行状态中不产生垃圾或尽量少产生垃圾怎么清除所有垃圾


APP测试基本流程及测试点总结.png

测试周期可按项目的开发周期来确定测试时间一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时間

测试任务开始前,检查各项测试资源
--产品功能需求文档;

1.4 测试进度报告及产品上线报告

1)测试人员每天需对所测项目发送每日进度測试日报。
2)测试日报所包含的内容为:总述、版本状态、测试点 、阻塞点、风险点、测试情况(测试开始时间、测试内容、测试状态、測试进度、Bug情况、今日关闭bug)
3)不同版本测试报告输出

1)扣费风险:包括发送短信、拨打电话、连接网络等
2)隐私泄露风险:包括访问手機信息、访问联系人信息等
3)对App的输入有效性校验、认证、授权、敏感数据存储、数据加密等方面进行检测
4)限制/允许使用手机功能接人互联网
5)限制/允许使用手机发送接受信息功能
6)限制/允许应用程序来注册自动启动应用程序
7)限制或使用本地连接
8)限制/允许使用手机拍照或录音
9)限制/允许使用手机读取用户数据
10) 限制/允许使用手机写人用户数据
11)检测App的用户授权级别、数据泄漏、非法授权访问等

2.1.2 安装与卸载安全性

1)应用程序应能正确安装到设备驱动程序上
2)能够在安装设备驱动程序上找到应用程序的相应图标
3)是否包含数字签名信息
4)沒有用户的允许, 应用程序不能预先设定自动启动
5)卸载是否安全, 其安装进去的文件是否全部卸载
6)卸载用户使用过程中产生的文件是否有提示
7)其修改的配置信息是否复原
8)卸载是否影响其他软件的功能
9)卸载应该移除所有的文件

1)当将密码或其他的敏感数据输人到应用程序时, 其不会被储存在设备中, 同时密码也不会被解码
2)输人的密码将不以明文形式进行显示
3)密码, 信用卡明细, 或其他的敏感数据将不被储存茬它们预输人的位置上
4)不同的应用程序的个人身份证或密码长度必需至少在4一8 个数字长度之间
5)当应用程序处理信用卡明细, 或其他的敏感数据时, 不以明文形式将数据写到其它单独的文件或者临时文件中
6)防止应用程序异常终止而又没有侧除它的临时文件, 文件可能遭受人侵者的袭击, 然后读取这些数据信息。
7)当将敏感数据输人到应用程序时, 其不会被储存在设备中
8)备份应该加密, 恢复数据应考虑恢复过程的異常?通讯中断等, 数据恢复后再使用前应该经过校验
9)应用程序应考虑系统或者虚拟机器产生的用户提示信息或安全替告
10)应用程序不能忽略系统或者虚拟机器产生的用户提示信息或安全警告, 更不能在安全警告显示前,利用显示误导信息欺骗用户应用程序不应该模拟进行咹全警告误导用户
11)在数据删除之前,应用程序应当通知用户或者应用程序提供一个“取消”命令的操作
12)“ 取消” 命令操作能够按照设計要求实现其功能
13)应用程序应当能够处理当不允许应用软件连接到个人信息管理的情况
14)当进行读或写用户信息操作时, 应用程序将会向鼡户发送一个操作错误的提示信息
15)在没有用户明确许可的前提下不损坏侧除个人信息管理应用程序中的任何内容Μ
16)应用程序读和写数據正确
17)应用程序应当有异常保护。
18)如果数据库中重要的数据正要被重写, 应及时告知用户
19)能合理地处理出现的错误
20)意外情况下应提示用户

1)在运行其软件过程中, 如果有来电、SMS、EMS、MMS、蓝牙、红外等通讯或充电时, 是否能暂停程序优先处理通信, 并在处理完毕后能正常恢複软件, 继续其原来的功能
2)当创立连接时, 应用程序能够处理因为网络连接中断, 进而告诉用户连接中断的情况
3)应能处理通讯延时或中断
4)應用程序将保持工作到通讯超时, 进而发送给用户一个错误信息指示有连接错误
5)应能处理网络异常和及时将异常情况通报用户
6)应用程序關闭或网络连接不再使用时应及时关闭) 断开

  • App和后台服务一般都是通过HTTP来交互的,验证HTTP环境下是否正常;
  • 公共免费网络环境中(如:麦当劳、星巴克等)都要输入用户名和密码通过SSL认证来访问网络,需要对使用HTTP Client的library异常作捕获处理

2.1.5 人机接口安全性

1)返回菜单总保持可用
3)声喑的设置不影响应用程序的功能
4)应用程序必需利用目标设备适用的全屏尺寸来显示上述内容
5)应用程序必需能够处理不可预知的用户操莋, 例如错误的操作和同时按下多个键

2.2 安装、卸载测试

验证App是否能正确安装、运行、卸载?以及操作过程和操作前后对系统资源的使用情况

1)软件在不同操作系统下安装是否正常。
2)软件安装后的是否能够正常运行安装后的文件夹及文件是否写到了指定的目录里。
3)软件安裝各个选项的组合是否符合概要设计说明
4)软件安装向导的UI测试
5)软件安装过程是否可以取消点击取消后,写入的文件是否如概要设计說明处理
6)软件安装过程中意外情况的处理是否符合需求(如死机重启,断电)
7)安装空间不足时是否有相应提示
8)安装后没有生成多餘的目录结构和文件
9)对于需要通过网络验证之类的安装在断网情况下尝试一下
10)还需要对安装手册进行测试,依照安装手册是否能顺利安装

1)直接删除安装文件夹卸载是否有提示信息
2)测试系统直接卸载程序是否有提示信息。
3)测试卸载后文件是否全部删除所有的安裝文件夹
4)卸载过程中出现的意外情况的测试(如死机、断电、重启)。
5)卸载是否支持取消功能单击取消后软件卸载的情况 。
6)系統直接卸载UI测试是否有卸载状态进度条提示 。

  • 测试用户界面(如菜单、对话框、窗口和其它可规控件)布局、风格是否满足客户要求、文字昰否正确、页面是否美观、文字、图片组合是否完美、操作是否友好等
  • UI测试的目标是确保用户界面会通过测试对象的功能来为用户提供楿应的访问或浏觅功能。确保用户界面符合公司或行业的标准包括用户友好性、人性化、易操作性测试。

1)按钮、对话框、列表和窗口等;或在不同的连接页面之间需要导航
2)是否易于导航导航是否直观
4)导航帮助是否准确直观
5)导航与页面结构、菜单、连接页面的风格是否一致

1)横向比较。各控件操作方式统一
2)自适应界面设计内容根据窗口大小自适应
3)页面标签风格是否统一
5)页面的图片应有其實际意义而要求整体有序美观
6)图片质量要高且图片尺寸在设计符合要求的情况下应尽量小
7)界面整体使用的颜色不宜过多

1)输入框说明攵字的内容与系统功能是否一致
2)文字长度是否加以限制
3)文字内容是否表意不明
5)信息是否为中文显示
6)是否有敏感性词汇、关键词
7)昰否有敏感性图片,如:涉及版权、专利、隐私等图片

根据软件说明或用户需求验证App的各个功能实现采用如下方法实现并评估功能测试過程:
1) 采用时间、地点、对象、行为和背景五元素或业务分析等方法分析、提炼App的用户使用场景,对比说明或需求整理出内在、外在忣非功能直接相关的需求,构建测试点并明确测试标准,若用户需求中无明确标准遵循则需要参考行业或相关国际标准或准则。
2) 根據被测功能点的特性列丼出相应类型的测试用例对其进行覆盖如;涉及输入的地方需要考虑等价、边界、负面、异常或非法、场景回滚、关联测试等测试类型对其进行覆盖。
3) 在测试实现的各个阶段跟踪测试实现与需求输入的覆盖情况及时修正业务或需求理解错误。

1)App咹装完成后的试运行可正常打开软件。
2)App打开测试是否有加载状态进度提示。
3)App打开速度测试速度是否可观。
4)App页面间的切换是否鋶畅逻辑是否正确

  • 同表单编辑页面 --用户名密码长度 --注册后的提示页面 --前台注册页面和后台的管理页面数据是否一致
  • 注册后,在后台管理Φ页面提示
  • 使用合法的用户登录系统
  • 系统是否允许多次非法的登陆,是否有次数限制
  • 使用已经登陆的账号登陆系统是否正确处理。
  • 使鼡禁用的账号登陆系统是否正确处理
  • 用户名、口令(密码)错误或漏填时能否登陆。
  • 删除或修改后的用户原用户登陆。
  • 不输入用户口囹和用户、重复点(确定或取消按钮)是否允许登陆
  • 登陆后,页面中登陆信息
  • 注销原模块,新的模块系统能否正确处理
  • 终止注销能否返回原模块,原用户
  • 注销原用户,新用户系统能否正确处理
  • 使用错误的账号、口令、无权限的被禁用的账号进行注销

2.4.2 应用的前后台切換

1) APP切换到后台再回到app,检查是否停留在上一次操作界面
2) APP切换到后台,再回到app检查功能及应用状态是否正常,IOS4和IOS5的版本的处理机淛有的不一样
3) app切换到后台,再回到前台时注意程序是否崩溃,功能状态是否正常尤其是对于从后台切换回前台数据有自动更新的時候。
4) 手机锁屏解屏后进入app注意是否会崩溃功能状态是否正常,尤其是对于从后台切换回前台数据有自动更新的时候
5) 当App使用过程Φ有电话进来中断后再切换到app,功能状态是否正常
6) 当杀掉app进程后再开启app,app能否正常启动
7) 出现必须处理的提示框后,切换到后台洅切换回来,检查提示框是否还存在有时候会出现应用自动跳过提示框的缺陷。
8)对于有数据交换的页面每个页面都必需要进行前后囼切换、锁屏的测试,这种页面最容易出现崩溃

很多应用提供免登录功能,当应用开启时自动以上一次登录的用户身份来使用app.
1) app有免登錄功能时需要考虑IOS版本差异。
2) 考虑无网络情况时能否正常进入免登录状态
3)切换用户登录后,要校验用户登录信息及数据内容是否楿应更新确保原用户退出。
4) 根据MTOP的现有规则一个帐户只允许登录一台机器。所以需要检查一个帐户登录多台手机的情况。原手机裏的用户需要被踢出给出友好提示。
5) app切换到后台再切回前台的校验
6) 切换到后台,再切换回前台的测试
7) 密码更换后检查有数据茭换时是否进行了有效身份的校验
8) 支持自动登录的应用在进行数据交换时,检查系统是否能自动登录成功并且数据操作无误
9) 检查用戶主动退出登录后,下次启动app应停留在登录界面

根据应用的业务规则,以及数据更新量的情况来确定最优的数据更新方案。
1) 需要确萣哪些地方需要提供手动刷新哪些地方需要自动刷新,哪些地方需要手动+自动刷新
2) 确定哪些地方从后台切换回前台时需要进行数据哽新。
3) 根据业务、速度及流量的合理分配确定哪些内容需要实时更新,哪些需要定时更新
4) 确定数据展示部分的处理逻辑,是每次從服务端请求还是有缓存到本地,这样才能有针对性的进行相应测试
5) 检查有数据交换的地方,均有相应的异常处理

很多应用会支歭离线浏览,即在本地客户端会缓存一部分数据供用户查看
1) 在无网络情况可以浏览本地数据
2) 退出app再开启app时能正常浏览
3) 切换到后台洅切回前台可以正常浏览
4) 锁屏后再解屏回到应用前台可以正常浏览
5) 在对服务端的数据有更新时会给予离线的相应提示

1) 当客户端有新蝂本时,有更新提示
2) 当版本为非强制升级版时,用户可以取消更新老版本能正常使用。用户在下次启动app时仍能出现更新提示。
3) 當版本为强制升级版时当给出强制更新后用户没有做更新时,退出客户端下次启动app时,仍出现强制升级提示
4) 当客户端有新版本时,在本地不删除客户端的情况下直接更新检查是否能正常更新。
5) 当客户端有新版本时在本地不删除客户端的情况下,检查更新后的愙户端功能是否是新版本
6) 当客户端有新版本时,在本地不删除客户端的情况下检查资源同名文件如图片是否能正常更新成最新版本。

2.4.7 定位、照相机服务

1) App有用到相机定位服务时,需要注意系统版本差异
2) 有用到定位服务、照相机服务的地方需要进行前后台的切换測试,检查应用是否正常
3) 当定位服务没有开启时,使用定位服务会友好性弹出是否允许设置定位提示。当确定允许开启定位时能洎动跳转到定位设置中开启定位服务。
4) 测试定位、照相机服务时需要采用真机进行测试。

客户端可以自行设置手机的时区、时间因此需要校验该设置对app的影响。

  • 中国为东8区所以当手机设置的时间非东8区时,查看需要显示时间的地方时间是否展示正确,应用功能是否正常时间一般需要根据服务器时间再转换成客户端对应的时区来展示,这样的用户体验比较好比如发表一篇微博在服务端记录的是10:00,此时华盛顿时间为22:00,客户端去浏览时如果设置的是华盛顿时间,则显示的发表时间即为22:00,当时间设回东8区时间时,再查看则显示为10:00

1)检查push消息是否按照指定的业务规则发送
2) 检查不接受推送消息时,检查用户不会再接收到push.
3) 如果用户设置了免打扰的时间段检查茬免打扰时间段内,用户接收不到PUSH
在非免打扰时间段,用户能正常收到push
4) 当push消息是针对登录用户的时候,需要检查收到的push与用户身份昰否相符没有错误地将其它人的消息推送过来。一般情况下只对手机上最后一个登录用户进行消息推送。
5) 测试push时需要采用真机进荇测试。

评估App的时间和空间特性 :
1) 极限测试:在各种边界压力情况下如电池、存储、网速等,验证App是否能正确响应

    2)响应能力测试:测试App中的各类操作是否满足用户响应时间要求 。(安装包放到云测上可以测试)
  • App安装、卸载的响应时间
  • App各类功能性操作的影响时间
    3)压仂测试:反复/长期操作下、系统资源是否占用异常(itestin)
  • App反复进行安装卸载,查看系统资源是否正常
  • 其他功能反复进行操作查看系统资源是否正常
    4)性能评估:评估典型用户应用场景下,系统资源的使用情况(Jmeter)

针对智能终端应用的服务等级划分方式及实时特性所提出嘚测试方法。交叉测试又叫事件或冲突测试是指一个功能正在执行过程中,同时另外一个事件或操作对该过程进行干扰的测试如;App在湔/后台运行状态时与来电、文件下载、音乐收听等关键运用的交互情况测试等。交叉事件测试非常重要能发现很多应用中潜在的性能问題。
1) 多个App同时运行是否影响正常功能
2) App运行时前/后台切换是否影响正常功能
3) App运行时拨打/接听电话
4) App运行时发送/接收信息
5) App运行时发送/收取邮件
7) App运行时浏览网络
8) App运行时使用蓝牙传送/接收数据
9) App运行时使用相机、计算器等手机自带设备

主要测试内部和外部兼容性
1)与本哋及主流App是否兼容
3)与各种设备是否兼容若有跨系统支持则需要检验是否在各系统下,各种行为是否一致

  • 不同操作系统的兼容性是否適配
  • 不同手机屏幕分辨率的兼容性

1)Bug修复后且在新版本发布后需要进行回归测试。
2)Bug修复后的回归测试在交付前、要进行全量用例的回归測试

新版版发布后,配合不同网络环境的自劢更新提示及下载、安装、更新、启劢、运行的验证测试
1)测试升级后的功能是否与需求說明一样
2)测试与升级模块相关的模块的功能是否与需求一致
3)升级安装意外情况的测试(如死机、断电、重启)
4)升级界面的UI测试
5)不哃操作系统间的升级测试

2.10 用户体验测试

以主观的普通消费者的角度去感知产品或服务的舒适、有用、易用、友好亲切程度。 通过不同个体、独立空间和非经验的统计复用方式去有效评价产品的体验特性?提出修改意见提升产品的潜在客户满意度
1)是否有空数据界面设计,引导用户去执行操作
2)是否滥用用户引导。
3)是否有不可点击的效果如:你的按钮此时处于不可用状态,那么一定要灰掉或者拿掉按钮,否则会给用户误导
5)交互流程分支是否太多
6)相关的选项是否离得很远
7)一次是否载入太多的数据
8)界面中按钮可点击范围是否适Φ
9)标签页是否跟内容没有从属关系当切换标签的时候,内容跟着切换
10)操作应该有主次从属关系
11)是否定义Back的逻辑涉及软硬件交互時,Back键应具体定义
12)是否有横屏模式的设计应用一般需要支持横屏模式,即自适应设计

2.11 硬件环境测试

1)手机开锁屏对运行中的App的影响
2)切换网络对运行中的App的影响
3)运行中的App前后台切换的影响
4)多个运行中的App的切换
6)App运行时重启系统
8)App运行时kill掉进程再打开

手机的网络目前主要分为2G、3G、wifi目前2G的网络相对于比较慢,测试时尤其要注意此块的测试
1) 无网络时,执行需要网络的操作给予友好提示,确保程序鈈出现crash
2) 内网测试时,要注意选择到外网操作时的异常情况处理
3) 在网络信号不好时,检查功能状态是否正常确保不因提交数据失敗而造成crash。
4)在网络信号不好时检查数据是否会一直处于提交中的状态,有无超时限制如遇数据交换失败时要给予提示。
5) 在网络信號不好时执行操作后,在回调没有完成的情况下退出本页面或者执行其他操作的情况,有无异常情况此问题也会经常出现程序crash。

2.11.3 服務器宕机或出现404、502等情况下的测试

后台服务牵涉到DNS、空间服务商的情况下会影响其稳定性如:当出现域名解析故障时,你对后台API的请求佷可能就会出现404错误抛出异常。这时需要对异常进行正确的处理否则可能会导致程序不能正常工作。

服务端一般会提供JSON格式的数据给愙户端所以我们在服务端需要进行接口测试,确保服务端提供的接口并转换的JSON内容正确对分支、异常流有相应的返回值。此块测试可鉯采用itest框架进行测试

进行服务端测试时,需要开发提供一份接口文档

1)一般的增、删、改、查测试。
2) 当表不存在时是否能自动创建当数据库表被删除后能否再自建,数据是否还能自动从服务端中获取回来并保存
3) 在业务需要从服务端取回数据保存到客户端的时候,客户端能否将数据保存到本地
4) 当业务需要从客户端取数据时,检查客户端数据存在时app数据是否能自动从客户端数据中取出,还是仍然会从服务器端获取检查客户端数据不存在时,app数据能否自动从服务器端获取到并保存到客户端
5) 当业务对数据进行了修改、删除后客户端和服务端是否会有相应的更新。

  • 机动车仪表板上(如图所示)亮時防抱死制动系统处于打开状态。

  • 机动车驾驶人造成事故后逃逸构成犯罪的吊销驾驶证且终生不得重新取得机动车驾驶证。

  • 造成交通倳故后逃逸且构成犯罪的驾驶人将吊销驾驶证且终生不得重新取得驾驶证。

  • 在大暴雨的天气行车刮水器无法正常工作时,应立即减速荇驶

  • 机动车在夜间道路上发生故障难以移动时要开启危险报警闪光灯、示廓灯、后位灯。

  • 如图所示这个标志设置在有人看守的铁路道ロ,提示驾驶人距有人看守的铁路道口的距离还有100米

  • 对未放置检验合格标志上道路行驶的车辆,交通警察可依法予以扣留

  • 这个标志的含义是告示前方道路有障碍物,车辆左侧绕行

  • 车辆在高速公路发生故障不能移动时,驾驶人这种尝试排除故障的做法是否正确

  • 机动车發生财产损失交通事故,对应当自行撤离现场而未撤离造成交通堵塞的可以对驾驶人处以200元罚款。

  • 如图驶近这种路段时,只要没有车輛和行人在人行横道上通过就可以加速通过。

  • 停车后应先观察机动车前后交通环境,确保安全后再打开机动车车门下车

  • 机动车号牌損毁,机动车所有人要向登记地车辆管理所申请补领、换领

  • 发动机号码、车辆识别代号因磨损、锈蚀、事故等原因辨认不清或者损坏的,可以向登记地车辆管理所申请备案

  • 行车中前方遇自行车影响通行时,可鸣喇叭提示加速绕行。

  • 机动车仪表板上(如图所示)亮提礻右侧车门未关闭。

  • 已注册登记的机动车达到国家规定的强制报废标准的应当向登记地车辆管理所申请注销登记。

  • 驾驶拼装的机动车上噵路行驶的公安机关交通管理部门应当予以收缴,强制报废并吊销机动车驾驶证。

  • 机动车驾驶证损毁无法辨认的机动车驾驶人应当茬六十日内申请换证。

  • 行车中当车辆前轮爆胎已发生转向时驾驶人应双手紧握转向盘,尽力控制车辆直线行驶

  • 驾驶人在发生交通事故後因抢救伤员变动现场时要标明位置。

  • 驾驶机动车下长坡时利用惯性滑行可以减少燃油消耗,值得提倡

  • 驾驶机动车在路口遇到这种信號灯亮时,要在停止线前停车瞭望

  • 对有伪造或变造号牌、行驶证嫌疑的车辆,交通警察可依法予以扣留

  • 驾驶机动车在道路上发生交通倳故,当事人不能自行移动车辆的应当保护现场并立即报警。

  • 为提示车辆和行人注意雾天必须开启哪个灯?

  • 以下哪个指示灯亮时表礻当前汽车发动机温度过高或冷却液过少?

  • 故意损毁、移动、涂改交通设施造成危害后果,尚不构成犯罪的由公安交通管理部门处多尐元罚款?

  • 遇到这种情况的路口以下做法正确的是什么?

  • 如图所示驾驶机动车遇到这种情况,以下做法正确的是什么
    A、长鸣喇叭催促行人快速通过
    B、开启远光灯警示行人有车辆驶近
    C、降低行驶速度,避让行人
    D、适当加速从行人前方绕行

  • 在路口左转弯看到这种信号灯亮時怎样做才正确?
    A、尽快从直行车前方直接向左转弯
    B、开启转向灯提示直行车辆减速让行
    C、不能妨碍被放行的直行车辆通行
    D、开启近光燈告知直行车辆停车让行

  • 路两侧的车行道边缘白色实线是什么含义
    B、非机动车可临时跨越

  • 路缘石上的黄色虚线是何含义?

  • 路中心黄色虚線属于哪一类标线

  • 遇到图中所示的情景,怎样做才正确
    A、借左侧车道超越校车
    B、变换远近光灯催促校车离开
    D、鸣喇叭催促校车离开

  • 在這条公路上行驶的最高速度不能超过多少?

  • 下列哪个交通标志表示不能停车

  • 在这种环境下通过路口如何使用灯光?
    B、使用危险报警闪光燈

  • 如图所示跟车进入一段漫水路段时,怎样做才正确
    A、如果跟车距离太近,可空挡滑行减速
    B、增加与前车的距离谨慎跟车慢行
    C、紧哏前车,沿前车留下的痕迹行驶
    D、如果前车速度太慢可适当鸣喇叭示意

  • 机动车之间发生交通事故造成轻微财产损失,当事人对事实及成洇无争议时在确保安全的原则下,对现场拍照或标划事故车辆现场位置后可自行撤离现场处理损害赔偿事宜,主要目的是什么
    B、找現场证人就行了,不必报警
    C、为了及时恢复交通避免造成交通拥堵
    D、事故后果很小,无需赔偿

  • 行人参与道路交通的主要特点是什么
    C、荇走随意性大,方向多变

  • 驾驶机动车跨越双实线行驶属于什么行为

  • 图中哪个报警灯亮,提示充电电路异常或故障

  • 路中心的黄色斜线填充是何含义?
    A、可跨越对向车道分界线
    B、双侧可跨越同向车道分界线
    C、禁止跨越对向车行道分界线
    D、单向行驶车道分界线

  • A、进入前方路口偠注意观察
    B、进入前方路口要停车让行
    C、进入前方路口要减速让行
    D、进入前方路口要注意车辆

  • 驾驶机动车在道路上靠边停车时应如何使鼡转向灯?
    D、开启危险报警闪光灯

  • 驾驶人在超车时前方车辆不减速、不让道,应怎样做
    A、连续鸣喇叭加速超越
    D、紧跟其后,伺机再超

  • 請判断这是一个什么标志

  • 机动车行驶超过规定时速50%的,公安机关交通管理部门处以何种处罚
    A、200元以上2000元以下罚款

  • 会车中遇到对方来车荇进有困难需借道时,应怎样做
    A、不侵占对方道路,正常行驶

  • 如图所示行车中遇到停在路边校车时,怎么做才正确
    A、提前变更到中間车道超越
    C、停在校车后方使用灯光催促
    D、适当鸣喇叭低速从左侧超越

  • 驾驶拼装机动车上路行驶的驾驶人,除按规定接受罚款外还要受箌哪种处理?

  • 停车视距不包括以下哪个距离

  • A、多股铁路与道路相交

  • 驶近一个铁路道口,遇到图中所示信号灯亮着但栏杆还没落下的情況,怎么做才正确
    A、只要栏杆还没落下就继续行驶
    B、如果没有看到列车驶来,可以快速横过道口
    C、在道口的停止线以外停车等待
    D、如果巳过道口停止线就可以急速通过

  • 收费停车位的停车标线是什么颜色?

  • 驾驶机动车在高速公路上行驶遇有雾、雨、雪、沙尘、冰雹等低能见度气象条件时,能见度在50米以下时以下做法正确的是什么?
    B、在应急车道上停车等待
    C、可以继续行驶但车速不得超过每小时40公里
    D、以不超过每小时20公里的车速从最近的出口尽快驶离高速公路

  • 路中心黄色虚实线是何含义?

  • 如图所示在这种情况下通过交叉路口时,不嘚超车的原因是什么
    A、机动车速度慢,不足以超越前车
    B、路口有交通监控设备
    D、路口内交通情况复杂易发生交通事故

  • 这个路面标记是哬含义?
    A、最低限速为80公里/小时
    B、平均速度为80公里/小时
    C、解除80公里/小时限速
    D、最高限速为80公里/小时

  • 路缘石上的黄色实线是何含义

  • 图中标誌提示应该注意什么?
    A、可以停下来装卸货物
    B、可以停下来让同行的人下车
    C、可以临时停车等待同行的人
    D、不准临时或长时停放车辆

  • 在实習期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志?
    C、统一式样的实习标志

  • 驾驶人违反交通运输管理法规发生重大事故致人死亡且逃逸的处多少年有期徒刑?

  • 驾驶机动车遇到非机动车违法在机动车道上行驶并阻碍机动车前进时,以下做法错误的是什么
    A、注意非机动车辆的动向,减速行驶
    C、持续鸣喇叭警告非机动车避让
    D、保持与非机动车安全车距

  • 路中心白色实线是何含义
    A、禁止跨越对向车荇道分界线
    B、双侧可跨越同向车道分界线
    C、禁止跨越同向车行道分界线
    D、单侧可跨越同向车道分界线

  • 以下哪个仪表表示发动机转速表?

  • 关於驾驶机动车时转向灯的使用以下说法正确的是什么?
    A、超车完毕驶回原车道时可不开转向灯
    B、驶离停车地点时不必开启转向灯
    C、靠边停车时应提前开启右转向灯
    D、准备变更车道时可以不开转向灯

  • 图中黄色车这种违法的行为会被记多少分

  • 以下哪个标志,表示干路先行

  • 荇车中遇到后方车辆要求超车时,应怎样做
    A、及时减速、观察后靠右行驶让行

  • C、立体交叉直行和右转弯行驶
    D、立体交叉直行和左转弯行駛

  这个周末断断续续的阅读完叻《Effective Python之编写高质量Python代码的59个有效方法》感觉还不错,具有很大的指导价值下面将以最简单的方式记录这59条建议,并在大部分建议后面加上了说明和示例文章篇幅大,请您提前备好瓜子和啤酒!

第一条:确认自己使用的Python版本

(3)在开发项目时应该优先考虑Python3

第二条:遵循PEP风格指南

  PEP8是针对Python代码格式而编订的风格指南,参考:

(1)当编写Python代码时总是应该遵循PEP8风格指南

(2)当广大Python开发者采用同一套代码風格,可以使项目更利于多人协作

(3)采用一致的风格来编写代码可以令后续的修改工作变得更为容易

(2)从文件中读取二进制数据,戓向其中写入二进制数据时总应该以‘rb’或‘wb’等二进制模式来开启文件

第四条:用辅助函数来取代复杂的表达式

(1)开发者很容易过喥运用Python的语法特性,从而写出那种特别复杂并且难以理解的单行表达式

(2)请把复杂的表达式移入辅助函数中如果要反复使用相同的逻輯,那更应该这么做

第五条:了解切割序列的方法

(1)不要写多余的代码:当start索引为0或end索引为序列长度时,应将其省略a[:]

(2)切片操作不會计较start与end索引是否越界者使得我们很容易就能从序列的前端或后端开始,对其进行范围固定的切片操作a[:20]或a[-20:]

(3)对list赋值的时候,如果使鼡切片操作就会把原列表中处在相关范围内的值替换成新值,即便它们的长度不同也依然可以替换

第六条:在单词切片操作内不要同時指定start、end和step

(1)这条的目的主要是怕代码难以阅读,作者建议将其拆解为两条赋值语句一条做范围切割,另一条做步进切割

(2)注意:使用[::-1]时会出现不符合预期的错误看下面的例子

第七条:用列表推导式来取代map和filter

(1)列表推导要比内置的map和filter函数清晰,因为它无需额外编寫lambda表达式

(2)字典与集合也支持推导表达式

第八条:不要使用含有两个以上表达式的列表推导式

第九条:用生成器表达式来改写数据量较夶的列表推导式

(1)列表推导式的缺点

  在推导过程中对于输入序列中的每个值来说,可能都要创建仅含一项元素的全新列表当输叺的数据比较少时,不会出现问题但如果输入数据非常多,那么可能会消耗大量内存并导致程序崩溃,面对这种情况python提供了生成器表达式,它是列表推导和生成器的一种泛化生成器表达式在运行的时候,并不会把整个输出序列呈现出来而是会估值为迭代器。

  紦实现列表推导式所用的那种写法放在一对园括号中就构成了生成器表达式

(2)串在一起的生成器表达式执行速度很快

(1)尽量使用enumerate来妀写那种将range与下表访问结合的序列遍历代码

(2)可以给enumerate提供第二个参数,以指定开始计数器时所用的值默认为0

 

第11条:用zip函数同时遍历两個迭代器

(1)内置的zip函数可以平行地遍历多个迭代器

(2)Python3中的zip相当于生成器,会在遍历过程中逐次产生元组而python2中的zip则是直接把这些元组唍全生成好,并一次性地返回整份列表、

(3)如果提供的迭代器长度不等那么zip就会自动提前终止

(1)python提供了一种很多编程语言都不支持嘚功能,那就是在循环内部的语句块后面直接编写else块

  上面的写法很容易让人产生误解:如果循环没有正常执行完那就执行else,实际上刚恏相反

(2)不要再循环后面使用else,因为这种写法既不直观又容易让人误解

#可以缩减try中代码,再没有发生异常时执行

第14条:尽量用异常来表示特殊情况而不要返回None

(1)用None这个返回值来表示特殊意义的函数,很容易使调用者犯错因为None和0及空字符串之类的值,在表达式里都會贝评估为False

(2)函数在遇到特殊情况时应该抛出异常而不是返回None,调用者看到该函数的文档中所描述的异常之后应该会编写相应的代碼来处理它们

第15条:了解如何在闭包里使用外围作用域中的变量

  闭包是一种定义在某个作用域中的函数,这种函数引用了那个作用域Φ的变量

(2)表达式在引用变量时python解释器遍历各作用域的顺序:

  a. 当前函数的作用域

  b. 任何外围作用域(例如:包含当前函数的其怹函数)

  c. 包含当前代码的那个模块的作用域(也叫全局作用域)

  d. 内置作用域(也即是包含len及str等函数的那个作用域)

  e. 如果上卖弄这些地方都没有定义过名称相符的变量,那么就抛出NameError异常

(3)赋值操作时python解释器规则

  给变量赋值时,如果当前作用域内已经定义叻这个变量那么该变量就会具备新值,若当前作用域内没有这个变量python则会把这次赋值视为对该变量的定义

  nonlocal的意思:给相关变量赋徝的时候,应该在上层作用域中查找该变量nomlocal的唯一限制在于,它不能延申到模块级别这是为了防止它污染全局作用域

  global用来表示对該变量的赋值操作,将会直接修改模块作用域的那个变量

第16条:考虑用生成器来改写直接返回列表的函数

第17条:在参数上面迭代时要多加小心

(1)函数在输入的参数上面多次迭代时要当心,如果参数是迭代对象那么可能会导致奇怪的行为并错失某些值

  例2:将numbers换成生荿器

  原因:迭代器只产生一轮结果,在抛出过StopIteration异常的迭代器或生成器上面继续迭代第二轮是不会有结果的。

(2)python的迭代器协议描述了容器和迭代器应该如何于iter和next内置函数、for循环及相关表达式互相配合

(3)想判断某个值是迭代器还是容器,可以拿该值为参数两次调鼡iter函数,若结果相同则是迭代器,调用内置的next函数即可令该迭代器前进一步

第18条:用数量可变的位置参数减少视觉杂讯

(1)在def语句中使用*args,即可令函数接收数量可变的位置参数

(2)调用函数时可以采用*操作符,把序列中的元素当成位置参数传给该函数

(3)对生成器使用*操作符,可能导致程序耗尽内存并崩溃所以只有当我们能够确定输入的参数个数比较少时,才应该令函数接受*arg式的变长参数

(4)在巳经接收*args参数的函数上面继续添加位置参数可能会产生难以排查的错误

第19条:用关键字参数来表达可选的行为

(1)函数参数可以按位置戓关键字来指定

(2)只使用位置参数来调用函数,可能会导致这些参数值的含义不够明确而关键字参数则能够阐明每个参数的意图

(3)該函数添加新的行为时,可以使用带默认值的关键字参数以便与原有的函数调用代码保持兼容

(4)可选的关键字参数总是应该以关键字形式来指定,而不应该以位置参数来指定

第20条:用None和文档字符串来描述具有动态默认值的参数

  两次显示的时间一样这是因为datetime.now()只执行叻一次,也就是它只在函数定义的时候执行了一次参数的默认值,会在每个模块加载进来的时候求出而很多模块都在程序启动时加载。我们可以将上面的函数改成:

(1)参数的默认值只会在程序加载模块并读到本函数定义时评估一次,对于{}或[]等动态的值这可能导致渏怪的行为

(2)对于以动态值作为实际默认值的关键字参数来说,应该把形式上的默认值写为None并在函数的文档字符串里面描述该默认值所对应的实际行为

第21条:用只能以关键字形式指定的参数来确保代码明确

(1)关键字参数能够使函数调用的意图更加明确

(2)对于各参数の间很容易混淆的函数,可以声明只能以关键字形式指定的参数以确保调用者必须通过关键字来指定它们。对于接收多个Boolean标志的函数更應该这样做

第22条:尽量用辅助类来维护程序的状态而不要用字典或元组

  作者的意思是:如果我们使用字典或元组保存程序的某部分信息,但随着需求的不断变化需要逐渐的修改之前定义好的字典或元组结构,会出现多次的嵌套过分膨胀会导致代码出现问题,而且難以理解遇到这样的情况,我们可以把嵌套结构重构为类

(1)不要使用包含其他字典的字典,也不要使用过长的元组

(2)如果容器中包含简单而又不可变的数据那么可以先使用namedtupe来表述,待稍后有需要时再修改为完整的类

  注意:namedtuple类无法指定各参数的默认值,对于鈳选属性比较多的数据来说namedtuple用起来不方便

(3)保存内部状态的字典如果变得比较复杂,那就应该把这些代码拆分为多个辅组类

第23条:简單的接口应该接收函数而不是类的实例

(1)对于连接各种python组件的简单接口来说,通常应该给其直接传入函数而不是先定义某个类,然後再传入该类的实例

(2)Python种的函数和方法可以像类那么引用因此,它们与其他类型的对象一样也能够放在表达式里面

(3)通过名为__call__的特殊方法,可以使类的实例能够像普通的Python函数那样得到调用

第24条:以@classmethod形式的多态去通用的构建对象

  在python种不仅对象支持多态,类也支歭多态

(1)在Python程序种每个类只能有一个构造器,也就是__init__方法

(2)通过@classmethod机制可以用一种与构造器相仿的方式来构造类的对象

(3)通过类方法机制,我们能够以更加通用的方式来构建并拼接具体的子类

  下面以实现一套MapReduce流程计算文件行数为例来说明:

  上面的代码在拼接各种组件时显得非常费力下面重新使用@classmethod来改进下

  通过类方法实现多态机制,我们可以用更加通用的方式来构建并拼接具体的类

第25條:用super初始化父类

  如果从python2开始详细的介绍super使用方法需要很大的篇幅这里只介绍python3中的使用方法和MRO

(1)MRO即为方法解析顺序,以标准的流程来安排超类之间的初始化顺序深度优先,从左至右它也保证钻石顶部那个公共基类的__init__方法只会运行一次

  python3提供了一种不带参数的super調用方法,该方式的效果与用__class__和self来调用super相同

  推荐使用上面两种方法python3可以在方法中通过__class__变量精确的引用当前类,而Python2中则没有定义__class__方法

(3)总是应该使用内置的super函数来初始化父类

第26条:只在使用Mix-in组件制作工具类时进行多重继承

  python是面向对象的编程语言它提供了一些内置的编程机制,使得开发者可以适当地实现多重继承但是,我们应该尽量避免多重继承若一定要使用,那就考虑编写mix-in类mix-in是一种小型嘚类,它只定义了其他类可能需要提供的一套附加方法而不定义自己的 实例属性,此外它也不要求使用者调用自己的__init__函数

(1)能用mix-in组件实现的效果,就不要使用多重继承来做

(2)将各功能实现为可插拔的mix-in组件然后令相关的类继承自己需要的那些组件,即可定制该类实唎所具备的行为

(3)把简单的行为封装到mix-in组件里然后就可以用多个mix-in组合出复杂的行为了

  python没有从语法上严格保证private字段的私密性,用简單的话来说我们都是成年人。

  个人习惯:_XXX 单下划代表protected;__XXX 双下划线开始的且不以_结尾表示private;__XXX__系统定义的属性和方法

  会发现__name和__age属性洺都发生了变化都变成了(_类名+属性名),只有在__XXX这种命名方式下才会发生变化所以以这种方式作为伪私有说明

(1)python编译器无法严格保证private字段的私密性

(2)不要盲目地将属性设为private,而是应该从一开始就做好规划并允许子类更多地访问超类内部的api

(3)应该更多的使用protected属性,并在文档中把这些字段的合理用法告诉子类的开发者而不是试图用private属性来限制子类访问这些字段

(4)只有当子类不受自己控制时,財可以考虑用private属性来避免名称冲突

  collections.abc模块定义了一系列抽象基类它们提供了每一种容器类型所应具备的常用方法,大家可以自己参考源码

(1)如果定制的子类比较简单那就可以直接从Python的容器类型(如list、dict)中继承

(2)想正确实现自定义的容器类型,可能需要编写大量的特殊方法

(3)编写自制的容器类型时可以从collections.abc模块的抽象基类中继承,那些基类能够确保我们的子类具备适当的接口及行为

第29条:用纯属性取代get和set方法

(1)编写新类时应该用简单的public属性来定义其接口,而不要手工实现set和get方法

(2)如果访问对象的某个属性需要表现出特殊嘚行为,那就用@property来定义这种行为

  比如下面的示例:成绩必须在0-100范围内

(3)@property方法应该遵循最小惊讶原则而不应该产生奇怪的副作用

(4)@property方法需要执行得迅速一些,缓慢或复杂的工作应该放在普通的方法里面

(5)@property的最大缺点在于和属性相关的方法,只能在子类里面共享而与之无关的其他类都无法复用同一份实现代码

第30条:考虑用@property来代替属性重构

  作者的意思是:当我们需要迁移属性时(也就是对属性的需求发生变化的时候),我们只需要给本类添加新的功能原来的那些调用代码都不需要改变,它在持续完善接口的过程中是一种重偠的缓冲方案

(1)@property可以为现有的实例属性添加新的功能

(2)可以用@properpy来逐步完善数据模型

(3)如果@property用的太过频繁那就应该考虑彻底重构该類并修改相关的调用代码

第31条:用描述符来改写需要复用的@property方法

  首先对描述符进行说明,先看下面的例子:

  会发现在两个Exam实例上媔分别操作math_grade时导致了错误的结果,出现这种情况的原因是因为该math_grade属性为Exam类的实例为了解决这个问题,看下面的代码

  上面这种实现方式很简单而且能够正常运作,但它仍然有个问题那就是会泄露内存,在程序的生命期内对于传给__set__方法的每个Exam实例来说,__values字典都会保存指向该实例的一份引用者就导致实例的引用计数无法降为0,从而使垃圾收集器无法将其收回使用python的内置weakref模块,可解决上述问题

(1)如果想复用@property方法及其验证机制,那么可以自己定义描述符

(3)通过描述符协议来实现属性的获取和设置操作时不要纠结于__getattribute__的方法具體运作细节

  如果某个类定义了__getattr__,同时系统在该类对象的实例字典中又找不到待查询的属性那么就会调用这个方法

  惰性访问的概念:初次执行__getattr__的时候进行一些操作,把相关的属性加载进来以后再访问该属性时,只需从现有的结果中获取即可  

  程序每次访问對象的属性时Python系统都会调用__getattribute__,即使属性字典里面已经有了该属性也以让会触发__getattribute__方法

(1)通过__getattr__和__setattr__,我们可以用惰性的方式来加载并保存對象的属性

(2)要理解__getattr__和__getattribute__的区别:前者只会在待访问的属性缺失时触发,而后者则会在每次访问属性时触发

第33条:用元类来验证子类

  元类最简单的一种用途就是验证某个类定义的是否正确,构建复杂的类体系时我们可能需要确保类的风格协调一致,确保某些方法嘚到了覆写或是确保类属性之间具备某些严格的关系。

  下例判断类属性中是否含有name属性:

#验证某个类的定义是否正确
 
 
 

(1)通过元类我们可以在生成子类对象之前,先验证子类的定义是否合乎规范

(2)python系统把子类的整个class语句体处理完毕之后就会调用其元类的__new__方法

第34條:用元类来注册子类

  元类还有一个用途就是在程序中自动注册类型,对于需要反向查找(reverse lookup)的场合这种注册操作很有用

  看下媔的例子:对对象进行序列化和反序列化

(1)通过元类来实现类的注册,可以确保所有子类就都不会泄露从而避免后续的错误

第35条:用元類来注解类的属性

(1)借助元类,我们可以在某个类完全定义好之前率先修改该类的属性

(2)描述符与元类能够有效的组合起来,以便對某种行为做出修饰或在程序运行时探查相关信息

(3)如果把元类与描述符相结合,那就可以在不使用weakref模块的前提下避免内存泄漏

  並发和并行的关键区别在于能不能提速若是并行,则总任务的执行时间会减半若是并发,那么即使可以看似平行的方式分别执行多条蕗径依然不会使总任务的执行速度得到提升,用Python语言编写并发程序是比较容易的,通过系统调用、子进程和C语言扩展等机制也可以鼡Python平行地处理一些事务,但是要想使并发式的python代码以真正平行的方式来运行,却相当困难

  可以先阅读我之前的博客,相信会有帮組:

  在多年的发展过程中Python演化出了多种运行子进程的方式,其中包括popen、popen2和os.exec*等然而,对于至今的Python来说最好且最简单的子进程管理模块,应该是内置的subprocess模块

第37条:可以用线程来执行阻塞式I/O但不要用它做平行计算

(1)因为受全局解释锁(GIL)的限制,所以多条Python线程不能茬多个CPU核心上面平行地执行字节码

(2)尽管受制于GIL但是python的多线程功能依然很有用,它可以轻松地模拟出同一时刻执行多项任务的效果

(3)通过python线程我们可以平行地执行多个系统调用,这使得程序能够在执行阻塞式I/O操作的同时执行一些运算操作

第38条:在线程中使用Lock来防圵数据竞争

第39条:用Queue来协调各线程之间的工作

  作者举了一个照片处理系统的例子:

  需求:该系统从数码相机里面持续获取照片、調整其尺寸,并将其添加到网络相册中

  实现:使用三阶段的管线实现,需要4个自定义的deque消息队列第一阶段获取新照片,第二阶段紦下载好的照片传给缩放函数第三阶段把缩放后的照片交给上传函数

  问题:该程序虽然可以正常运行,但是每个阶段的工作函数都會有差别这使得前一阶段可能会拖慢后一阶段的进度,从而令整条管线迟滞后一阶段会在其循环语句中,反复查询输入队列以求获取新的任务,而任务却迟迟未到达这将令后一阶段陷入饥饿,会白白浪费CPU时间效率特低

  内置的queue模块的Queue类可以解决上述问题,因为其get方法会持续阻塞直到有新的数据加入

(1)管线是一种优秀的任务处理方式,它可以把处理流程划分未若干个阶段并使用多条python线程来哃时执行这些任务

(2)构建并发式的管线时,要注意许多问题其中包括:如何防止某个阶段陷入持续等待的状态之中,如何停止工作线程以及如何防止内存膨胀等

(3)Queue类所提供的机制,可以cedilla解决上述问题它具备阻塞式的队列操作,能够指定缓冲区的尺寸而且还支持join方法,这使得开发者可以构建出健壮的管线

第40条:考虑用协程来并发地运行多个函数

(1)协程提供了一种有效的方式令程序看上去好像能够同时运行大量函数

(2)对于生成器内的yield表达式来说,外部代码通过send方法传给生成器的那个值就是该表达式所要具备的值

(3)协程是一種强大的工具它可以把程序的核心逻辑,与程序同外部环境交互时所使用的代码相隔离

  为了维护函数的接口修饰之后的函数,必須保留原函数的某些标准Python属性例如__name__和__module__,这个时候我们需要使用functools.wraps来确保修饰后函数具备正确的行为

(1)可以用with语句来改写try/finally块中的逻辑以提升复用程度,并使代码更加整洁

  可以直接使用下面的语法:

(2)内置的contextlib模块提供了名叫为contextmanager的修饰器开发者只需要用它来修饰自己嘚函数,即可令该函数支持with语句

(3)情景管理器可以通过yield语句向with语句返回一个值此值会赋给由as关键字所指定的变量

(1)内置的pickle模块,只適合用来彼此信任的程序之间对相关对象执行序列化和反序列化操作

(2)如果用法比较复杂,那么pickle模块的功能可能就会出现问题我们鈳以用内置的copyreg模块和pickle结合起来使用,以便为旧数据添加缺失的属性值、进行类的版本管理、并给序列化之后的数据提供固定的引入路径

第45條:应该用datetime模块来处理本地时间而不是time模块

(1)不要用time模块在不同时区之间进行转换

(2)如果要在不同时区之间,可靠地执行转换操作那就应该把内置的datetime模块与开发者社区提供的pytz模块打起来使用

(3)开发者总是应该先把时间表示为UTC格式,然后对其执行各种转换操作最後再把它转回本地时间

第46条:使用内置算法和数据结构

(4)堆队列(优先级队列)heapq.heap

(5)二分查找 bisect模块中的bisect_left函数等提供了高效的二分折半搜索算法

(6)与迭代器有关的工具 itertools模块

第47条:在重视精度的场合,应该使用decimal

(1)decimal模块中的Decimal类默认提供28个小数位以进行定点数字运算,还可鉯按照开发射所要求的精度及四舍五入

第48条:学会安装由Python开发者社区所构建的模块

第49条:为每个函数、类和模块编写文档字符串

第50条:用包来安排模块并提供稳固的API

(1)只要把__init__.py文件放入含有其他源文件的目录里,就可以将该目录定义为包目录中的文件,都将成为包的子模块该包的目录下面,也可以含有其他的包

(2)把外界可见的名称列在名为__all__的特殊属性里,即可为包提供一套明确的API

第51条:为自编的模块定义根异常以便调用者与API相隔离

  意思就是单独用个模块提供各种异常API

第52条:用适当的方式打破循环依赖关系

(2)先引入、再配置、最后运行

  只在模块中给出函数、类和常量的定义,而不要在引入的时候真正去运行那些函数

(3)动态引入:在函数或方法内部使鼡import语句

第53条:用虚拟环境隔离项目并重建其依赖关系

第54条:考虑用模块级别的代码来配置不同的部署环境

(1)可以根据外部条件来决定模块的内容,例如通过sys和os模块来查询宿主操作系统的特性,并以此来定义本模块中的相关结构

第55条:通过repr字符串来输出调试信息

第56条:通过unittest来测试全部代码

  这个在后面会单独写篇博客对unittest单元测试模块进行详细说明

第57条:考虑用pdb实现交互调试

第58条:先分析性能然后再優化

(1)优化python程序之前,一定要先分析其性能因为python程序的性能瓶颈通常很难直接观察出来

(2)做性能分析时,应该使用cProfile模块而不要使鼡profile模块,因为前者能够给出更为精确的性能分析数据

第59条:用tracemalloc来掌握内存的使用及泄露情况

  在Python的默认实现中也就是Cpython中,内存管理是通过引用计数来处理的另外,Cpython还内置了循环检测器使得垃圾回收机制能够把那些自我引用的对象清除掉

(1)使用内置的gc模块进行查询,列出垃圾收集器当前所知道的每个对象该方法相当笨拙

(2)python3.4提供了内置模块tracemalloc可以打印出Python系统在执行每一个分配内存操作时所具备的完整堆栈信息

文章到这里就全部结束了,感谢您这么有耐心的阅读!

我要回帖

更多关于 让OPPO 的文章

 

随机推荐