每次上Q,都是女的主动call男的,男的从来都不会主动call过女的,这说明了什么?

在某些实作上当你试图创建一個vector<auto_ptr<T> >的时候,会得到编译期错误这还是算你幸运;如果不幸运的话,事情看起来很好直到运行期得到不可预知的行为。总之标准容器類不能与拷贝构造函数不执行拷贝的类型合作。这也不是auto_ptr的设计目的并且,标准甚至指出“用auto_ptr实例化标准运行库中的容器会得到未定义嘚行为”当你需要异常安全机制时,你应该使用auto_ptr以在退出代码空间时delete指针;auto_ptr是因模拟了自动变量而得名的你不应该试图在容器类中使鼡auto_ptr来管理指针;它不可行。

取代auto_ptr你应该使用一个不同的“智能指针”,引用计数的指针类带引用计数的指针跟踪多少个指针指向相同嘚对象。当你构造了一个引用计数指针的拷贝时计数加1;当你销毁一个引用计数指针时,计数减1当计数变成0时,指针所指的对象被自動销毁

写一个引用计数的指针类不是特别困难,但也不是几乎什么都不用做;达到线程安全需要特别的技巧幸运地是,使用引用计数並不意味着你需要写一个自己的引用计数指针类;几种这样的类已经存在并可免费使用比如,你能使用Boost的shared_ptr类我期望 shared_ptr或其它类似的东西將成为C++标准的下个修订版本的组成部分。

当然引用计数只是一种特别的垃圾回收。像所有形式的垃圾回收它自动销毁你不再需要的对潒。引用计数指针的主要优势是它们易于加入现有系统:share_ptr这样的机制只是一个小的单独的类你能只在一个较大系统中某个部分中使用它。另一方面引用计数是垃圾回收的一种最低效的形式(每个指针的赋值和拷贝都需要一些相关的复杂处理),最没有柔性的形式(在两個数据结构拥有互指指针时你必须小心)。其它形式的垃圾回收在C++程序中工作得同样好特别地,Boehm conservative garbage collector是免费的、可移植的并被很好测试過。

如果你使用一个保守的垃圾回收器你只需要将它链接入程序就可以了。你不需要使用任何特别的指针包装类;只需要分配内存而不鼡关心delete它特别地,如果你创建一个vector<T *>你知道所指向的对象只要vector还存在就不会被delete掉(垃圾回收器绝不会破坏还有指针指向它们的对象),并且伱也知道它们将在 vector被销毁后的某个时候delete掉(除非程序的其它部份仍然引用它们)。

垃圾回收的优势(无论是引用计数还是保守的垃圾回收器或其它方法)是它让你将对象的生存期处理得完全不确定:你不须要掌握在某个特定时间程序的哪个部份引用了这个对象。另一方面垃圾回收的缺点也正是这一点!有时你确实知道对象的生存期,或至少知道在程序的某个特定状态结束后对象不应该继续存在举例来说,你可能创建了一个复杂的分析树;也许它填满了多态对象也许它是太复杂而无法单独掌握每个节点,但是你能确定在分析完后就将不洅需要它们中的任何一个

从手工管理的vetor<T *>到vector<shared_pointer<T> >到保守的垃圾回收器,我们逐步放弃了vector拥有一组对象的观点;垃圾回收的前提是对象的“所有權”是无关紧要的在某种意义上,它通过扔掉“所有权”问题而解决了这个难题

如果你的程序确实有明确定义的状态,那么你可能有悝由期望在某个状态结束时销毁一组对象代替垃圾回收,另外一个可选方法是通过一个arena(W注:字典上为“竞技场、舞台”之意译不好,不译)来分配对象:维护一个对象列表以便能一次就销毁所有对象。

你可能想知道这个技术和前面提到的技术(遍历容器并为每个元素调用destory())有多大差异有实质性差异吗?如果没有让我花了这么多时间的那些危险和限制,又怎么说

差异很小,但很重要:arena存储了一個对象集目的是为了在以后delete它们,并且没有其它目的它可以以标准容器的形式实现,但是它不暴露容器接口你在vector<T *>上遇到问题是因为伱能移除元素,拷贝覆盖元素和运用泛型算法。Arena是一个强所有权协议Arena容器为每个它所管理的对象容纳了一个并且只一个指针,并且它擁有所有这些对象;它不允许你移除、复制、覆盖或用选择子遍历它容纳的指针要使用arena中的对象,你需要在别处存储指向它们的指针--在容器中在树中,或在任何合适的数据结构中使用权和所有权完全分离。

arena 是个通用的主意arena可能简单地是个容器,只要记住别使用鈈安全的成员函数或者它可以是个包装类以试图运行得更安全。很多这样的包装类已经被写出来了[注7]Listing 1是一个arena类的简化例子,使用了一個实现上的技巧以使得不必为每个指针类型使用一个不同的arena类举例来说,你可能写:

}

Python常用库 - 【持续整理归档】比较哆,会逐步慢慢细化分类和扩从python常用库



Chardet字符编码探测器,可以自动检测文本、网页、xml的编码

colorama主要用来给文本添加各种颜色,并且非常簡单易用

Prettytable主要用于在终端或浏览器端构建格式化的输出。

Levenshtein快速计算字符串相似度。

esmre,正则表达式的加速器

xpinyin,将汉字转换为拼音的函数庫

pangu.py调整对中日韩文字当中的字母、数字间距。

uniout提取字符串中可读写的字符

phonenumbers,解析电话号码格式,存储和验证的国际电话号码

pygments,一個通用的语法高亮工具

pyparsing,通用解析器生成框架

marmir,把Python[数据结构]转化为电子表格。

pypdf2 合并和转换PDF页面的函数库。

chronyk一个Python 3版函数库,用于解析人写的时间和日期

delorean,清理期时间的函数库

when.py,为见的日期和时间提供人性化的功能。

lxml快速,易用、灵活的HTML和XML处理库功能超强,在遇到有缺陷、不规范的xml时Python自带的xml处理器可能无法解析。报错时程序会尝试再用lxml的修复模式解析。

htmlparser官方版解析HTML DOM树,偶尔搞搞命令荇自动表单提交用得上

html5lib,-标准库解析和序列化HTML文档和片段。

bleach漂白,基于HTML的白名单函数库

watchdog,一组API和shell实用程序用于监视文件系统事件。

Unipath面向对象的文件/目录的操作工具包。pathlib-(Python 3.4版已经作为Python标准库),一个跨平台面向path的函数库。

pickle/cPickle,python的pickle模块实现了基本的数据序列和反序列化通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作我们能够从文件Φ创建上一次程序保存的对象。

cPickle是[C语言]实现的版本速度更快。

profig多格式配置转换工具。

loggingPython标准库,日志文件生成管理函数库

Sphinx,斯芬克斯(狮身人面像)Python文档生成器。

pycco简单快速、编程风格的文档生成器。

pdoc自动生成的Python库API文档epydoc,从源码注释中生成各种格式文档的工具

Library)基于Python的图像处理库,功能强大对图形文件的格式支持广泛,内置许多图像处理函数如图像增强、滤波[算法]等Pillow,图像处理库PIL图像库嘚分支和升级替代产品。Matplotlib著名的绘图库,提供了整套和matlab相似的命令API用以绘制一些高质量的数学二维图形,十分适合交互式地进行制图brewer2mpl,有一个专业的python配色工具包提供了从美术角度来讲的精美配色。

PyGame基于Python的多媒体开发和游戏软件开发模块包含大量游戏和图像处理功能Box2d,开源的2d物理引擎愤怒的小鸟就是使用了这款物理引擎进行开发的,Box2d物理引擎内部模拟了一个世界你可以设置这个世界里的重力,嘫后往这个世界里添加各种物体以及他们的一些物理特性,比如质量摩擦,阻尼等等

目前最好的开源图像/视觉库,包括图像处理和計算机视觉方面、[机器学习]的很多通用算法SimpleCV,计算机视觉开源框架类似opencv。VTK视觉化工具函式库(VTK,

Toolkit)是一个开放源码跨平台、支援岼行处理(VTK曾用于处理大小近乎1个Petabyte的资料,其平台为美国Los

Alamos国家实验室所有的具1024个处理器之大型系统)的图形应用函式库

2005年时曾被美国陆軍研究实验室用于即时模拟俄罗斯制反导弹战车ZSU23-4受到平面波攻击的情形,其计算节点高达2.5兆个之多cgkit,Python Computer Graphics Kit,其module 主要分两个部分,

等有Python扩展的程序Φ直接用;

2. 提供完整的场景操作的module 他类似其他三维软件,在内存中保留完整的描述场景的信息

多边形(布尔操作,偏置)多面体(布爾运算),曲线整理及其应用

网格生成(二维Delaunay网格生成和三维表面和体积网格生成等),几何处理(表面网格简化细分和参数化等),

凸壳算法(2D3D和dD),搜索结构(近邻搜索kd树等),插值形状分析,拟合距离等。

Aggdraw开源图像库,几乎涵盖了2d image操作的所有功能使鼡起来非常灵活Pycairo,开源矢量绘图库Cairo开罗的python接口,

cairo提供在多个背景下做2-D的绘图高级的更可以使用硬件加速功能。wandPython绑定魔杖工具(MagickWand),C语言API接口

thumbor, -智能成像工具可调整大小和翻转图像。

imgSeek查询相似的图像。

uads基于四叉树的计算机艺术。

nude.py裸体检测函数。

hmap图像直方图工具。

4、Python游戏和多媒体类库

库名称简介audiolazy数字信号处理(DSP)的Python工具包。

beets音乐库管理。

dejavu音频指纹识别算法。

听一次音频后就会记录该音频的指纹信息然后可通过麦克风对输入的音频进行识别是否同一首歌。django-elastic-transcoder,Django

+亚马逊elastic转码eyeD3,音频文件工具,特别是MP3文件包含的ID3元数据

mutagen,处理音频え数据

pydub,-操纵音频和简单的高层次的接口

TimeSide,开放的网络音频处理框架

moviepy,多格式视频编辑脚本模块包括GIF动画。

geojsonGeoJSON函数库django-countries,一个Django程序提供国家选择,国旗图标的静态文件和一个国家的地域模型。

用C++写的完全兼容Python。PyOgreOGRE 3D渲染引擎,可用于游戏模拟,任何3D

库名称简介pycuda/opencl,GPU高性能并发计算Pandaspython实现的类似R语言的数据统计、分析平台。基于NumPy和Matplotlib开发的主要用于数据分析和数据可视化,它的数据结构DataFrame和R语言里嘚data.frame很像特别是对于时间序列数据有自己的一套分析机制,非常不错

SciPy,开源的Python算法库和数学工具包SciPy包含的模块有最优化、线性代数、積分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

Numpy和Scipy常常结合着使用Python夶多数机器学习库都依赖于这两个模块。

ScientificPython一组经过挑选的Python程序模块,用于科学计算包括几何学(矢量、张量、变换、矢量和张量场),四元数自动求导数,(线性)插值多项式,基础统计学非线性最小二乘拟合,单位计算Fortran兼容的文本格式,通过VRML的3D显示以及两個Tk小工具,分别用于绘制线图和3D网格模型

NumPy科学计算库,提供了矩阵线性代数,傅立叶变换等等的解决方案, 最常用的是它的N维数组对象. NumPy提供了两种基本的对象:

ndarray是存储单一数据类型的多维数组而ufunc则是能够对数组进行处理的函数。

Cvxopt最优化计算包,可进行线性规划、二次規划、半正定规划等的计算

Numba,科学计算速度优化编译器pymvpa2,是为大数据集提供统计学习分析的Python工具包它提供了一个灵活可扩展的框架。

它提供的功能有分类、回归、特征选择、数据导入导出、可视化等NetworkX复杂网络的优化软件包。zipline交易算法的函数库。

orange橙色,数据挖掘数据可视化,通过可视化编程或Python脚本学习机分析

RDKit,化学信息学和机器学习的软件。

Open Babel巴贝尔,开放的化学工具箱

cclib,化学软件包的计算函数库

Biopython,免费的生物计算工具包

bccb,生物分析相关的代码集bcbio-nextgen,提供完全自动化、高通量、测序分析的工具包

visvis, 可视化计算模块库,可進行一维到四维数据的可视化

MapReduce是Google提出的一个软件[架构],用于大规模数据集(大于1TB)的并行运算

概念“Map(映射)”和“Reduce(归纳)”,及怹们的主要思想都是从函数式编程语言借来的MapReduce函数库。Framworks

8、人工智能与机器学习

库名称简介NLTK(natural language toolkit)是python的自然语言处理工具包。2001年推出包括叻大量的词料库,以及自然语言处理方面的算法实现:

分词 词根计算, 分类 语义分析等。

Pattern数据挖掘模块,包括自然语言处理机器學习工具,等等

jieba,结巴中文分词工具。snownlp用于处理中文文本库。

loso中文分词函数库。

CRF),是一种鉴别式机率模型,是随机场的一种,常用于标紸或分析序列资料,如自然语言文字或是生物序列Gensim一个相当专业的主题模型Python工具包,无论是代码还是文档可用于如何计算两个文档的相姒度LIBSVM,是台湾大学林智仁(Lin

Chih-Jen)教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系統的执行文件还提供了源代码,方便改进、修改以及在其它[操作系统]上应用;

该软件对SVM所涉及的参数调节相对比较少提供了很多的默認参数,利用这些默认参数可以解决很多问题;

该软件可以解决C-SVM、ν-SVM、ε-SVR和ν-SVR等问题包括基于一对一算法的多类模式识别问题。

scikits.learn构建茬SciPy之上用于机器学习的 Python 模块。它包括简单而高效的工具可用于数据挖掘和数据分析。

涵盖分类回归和聚类算法,例如SVM 逻辑回归,朴素贝叶斯随机森林,k-means等算法代码和文档都非常不错,在许多Python项目中都有应用

例如在我们熟悉的NLTK中,分类器方面就有专门针对scikit-learn的接口可以调用scikit-learn的分类算法以及训练数据来训练分类器模型。PyMC机器学习采样工具包,scikit-learn似乎是所有人的宠儿有人认为,PyMC更有魅力

PyMC主要用来莋Bayesian分析。Orange基于组件的数据挖掘和机器学习软件套装,它的功能即友好又很强大,快速而又多功能的可视化编程前端以便浏览数据分析和可视化,包含了完整的一系列的组件以进行数据预处理并提供了数据帐目,过渡建模,模式评估和勘探的功能

侧重数据挖掘,鈳以用可视化语言或Python进行操作拥有机器学习组件,还具有生物信息学以及文本挖掘的插件

Milk,机器学习工具箱其重点是提供监督分类法与几种有效的分类分析:SVMs(基于libsvm),K-NN随机森林经济和决策树。

它还可以进行特征选择这些分类可以在许多方面相结合,形成不同的分类系统对于无监督学习,它提供K-means和affinity propagation聚类算法

Python),是为大数据集提供统计学习分析的Python工具包,它提供了一个灵活可扩展的框架它提供的功能囿分类、回归、特征选择、数据导入导出、可视化等NuPIC,开源人工智能平台

该项目由Grok(原名 Numenta)公司开发,其中包括了公司的算法和软件架構

NuPIC 的运作接近于人脑,“当模式变化的时候它会忘掉旧模式,记忆新模式”如人脑一样,CLA 算法能够适应新的变化Pylearn2,-基于Theano的机器学習库

gensim,机器学习库pybrain,机器学习模块它的目标是为机器学习任务提供灵活、易应、强大的机器学习算法。

pybrain包括神经网络、强化学习(及②者结合)、无监督学习、进化算法以神经网络为核心,所有的训练方法都以神经网络为一个实例Mahout,是

旗下的一个开源项目提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序

Mahout包含许多实现,包括聚类、分类、推荐过滤、頻繁子项挖掘此外,通过使用 Apache Hadoop 库Mahout 可以有效地扩展到云中。

Theano,用来定义、优化和模拟数学表达式计算用于高效的解决多维数组的计算问題的python软件包。它使得写深度学习模型更加容易同时也给出了一些关于在GPU上训练它们的选项。

库名称简介threadingPython标准线程库,更高级别的线程接口

envoy,特使Python子线程的函数库。

sh成熟的子线程替换函数库。sarge封装线程。subprocess,调用shell命令的神器argparse写命令行脚本必备,强大的命令行差数解析工具timeit计算代码运行的时间等等unp,命令行工具解压文件。

类似Gevent线程库Gevent多线程模块pytools,著名的python通用函数、工具包SendKeys, 键盘鼠标操作模块, 模拟键盤鼠标模拟操作。

pyHook,基于Python的“钩子”库主要用于监听当前电脑上鼠标和键盘的事件。

pstuil,跨平台地很方便获取和控制系统的进程以及读取系統的CPU占用内存占用等信息.cement,一个轻量级的、功能齐全的命令行工具click简单优雅的的命令行接口。

clintPython命令行工具。cliff创造多层次指令的命令荇程序框架。

Clime 可以转换任何模块为多的CLI命令程序,无任何配置

pycli,命令行应用程序支持的标准命令行解析,测井单元[测试]和功能测試。

Gooey打开命令行程序,作为为一个完整的GUI应用程序,cookiecutter命令行工具,从cookiecutters(项目模板)创建项目

percol,为UNIX传统管道pipe命令添加交互式选择风格。

butterdb谷歌电子表格的ORM,Python版celery,芹菜异步任务队列/工作,基于分布式消息队列

huey,休伊轻量级,多线程任务队列

mr,队列先生分布式任务队列,使用redis & Geventr,简单的工作队列

ueue,ueue模块可以用来实现多线程间通讯,让各个线程共享数据生产者把货物放到ueue中,供消费者(线程)詓使用

Psyco,超强的python性能优化工具psyco 的神奇在于它只需要在代码的入口处调用短短两行代码,性能就能提升 40% 或更多真可谓是立竿见影!如果你的客户觉得你的程序有点慢,敬请不要急着去优化代码psyco 或许能让他立即改变看法。

Toolz函数编程工具:迭代器、函数,字典CyToolz,Toolz的Cython实現高性能的函数编程工具。Ansible安塞波,极为简单的自动化平台

SaltStack,基础设施的自动化管理系统

Fabric,织物一个简单,远程执行和部署的語言工具

psutil,跨平台的过程和系统工具模块

pexpect,控制互动节目

gunnery,多任务执行工具与网络接口的分布式系统。

fig快速。独立的开发环境Φ使用泊坞窗

APScheduler,轻量级、但功能强大的在线任务调度程序

Joblib,Python提供的轻量级的流水线工具函数。

Spiff纯Python实现的,功能强大的工作流引擎

ctypes,Python標准库速度更快,Python调用C代码的外部函数接口cffi,Python调用C代码外部函数接口类似于ctypes直接在python程序中调用c程序,但是比ctypes更方便不要求编译成so再调鼡。

Stackless Python一个增强版本的Python。它使程序员从基于线程的编程方式中获得好处并避免传统线程所带来的性能与复杂度问题。

Stackless为 Python带来的微线程扩展是一种低开销、轻量级的便利工具Pyston,使用LLVM和现代JIT技术,对python进行性能优化。

TinyDB, 轻量级面向文档的数据库。

ourslMySL连接器,提供本地话指令语句和BLOBs支持

与urllib相比,它的速度要快很多

subliminal,命令行工具搜索和下载字幕的函数库reuests,HTTP函数库更加人性化。greuests异步HTTP请求+ Gevent(高性能高并发函数库)。

urllib3一个线程安全的HTTP连接池,支持文件post

POX,基于Python的开源软件定义网络(SDN)控制开发平台的应用如OpenFlow的SDN控制器。

PyreticSDN的编程语言,提供了强夶的抽象在网络交换机或仿真器SDX

Python版本IMAP库。inbox收件箱,开源邮件工具包

modoboa,邮件托管和管理平台包括现代和简化Web UI。

furl燃料,小型的的URL解析库库purl,简单的干净的API,操纵URL

Scrapy,快速屏幕截取和网页抓取的框架

mechanize,网页浏览编程工具

lassie,莱西,人性化的网站内容检索。

sumy概要,文夲和HTML网页的自动文摘模块

Haul,距离可扩展的图像爬虫。

sanitize消毒,使混乱的数据变的理智

boto,亚马逊网络服务接口

Pyramid,轻量级快速,稳萣的开源Web框架

web2py,简单易用的全堆栈Web框架和平台

guava,轻量级高性能的Python-Web框架,采用c语言编写

djedi-cms轻量级但功能强大的Django CMS的插件,内联编辑和性能优化

Kotte,高层次的Python的Web应用框架基于Pyramid。Mezzanine强大,一致灵活的内容管理平台。

Opps基于Django的CMS,用于高流量的报纸、杂志和门户网站

merchant,支持哆种付款处理工具

money,可扩展的货币兑换解决方案

Genshi,网络感知输出模板工具包

Mako,马可Python平台的超高速、轻型模板。

仿照ZPT优化速度。

Beaker烧杯,一个缓存和会话使用的Web应用程序独立的Python脚本和应用程序库。

django-simple-captchaDjango简单验证码,简单的和高度可定制的Django应用程序用于添加验证码圖像Ajenti,服务器管理面板

Cactus,仙人掌,设计师的网站静态生成器。

Hyde海德, 基于Jinja2的静态网站生成器

Nikola,尼古拉-一个静态网站和博客生成器

Tags,标簽最简单的静态网站生成器。

Tinkerer工匠,基于Sphinx的静态网站生成器

Twisted,扭曲事件驱动的网络引擎。

Tornado龙卷风,Web框架和异步网络的函数库

pulsar,脉冲星事件驱动的并行框架的Python。

diesel柴油,绿色的基于事件的I/O框架。

Werkzeug机床,WSGI工具函数库很容易地嵌入到你自己的项目框架。

paste粘貼,多线程稳定的,久经考验的WSGI工具

fapws3,异步网络用C写的。meinheld异步WSGI服务器,是用C写的

bjoern,-快速的、异步WSGI服务器用C写的。

【安全】Permissions函數库允许或拒绝用户访问数据或函数。

Authomatic简单强大的认证/授权客户端。

python-oauth2利用全面测试,抽象接口来创建OAuth的客户端和服务器

Paramiko,sshv2协议的實现提供了客户端和服务器端的功能。

Passlib安全的密码存储/哈希库,非常高的水平

WxPythonPython下的GUI编程框架,其消息机制与MFC的架构相似,入门非常简單需要快速开发相关的应用可以使用这个

TkinterPython下标准的界面编程包,因此不算是第三方库了

PySide跨平台t的应用程序和用户界面框架,支撑t v4框架

curse,用于创建终端GUI应用程序

urwid,创建终端GUI应用程序窗体的函数库支持事件,色彩丰富

pyglet,跨平台的窗口和多媒体库的Python

enaml,创建漂亮的用戶界面语法类似ML。

Toga托加,OS原生GUI工具包 【构建封装】

pew,一套管理多个虚拟环境的工具。

PyRun一个单文件,无需安装的Python版本管理工具

PIP,Python包囷依赖的管理工具

easy_install,软件包管理系统,提供一个标准的分配Python软件和 函式库的格式是一个附带设置工具的模块,和一个第三方函式库旨茬加快Python函式库的分配程式的速度。类似Ruby语言的RubyGems

conda,跨平台二进制软件包管理器。,

cx-Freeze跨平台的,用于打包成可执行文件的库

pyinstaller-转换成独立嘚可执行文件的Python程序(跨平台)。

PyPI新一代的Python包库管理工具。

devpiPyPI服务器和包装/测试/发布工具。

localshopPyPI官方包镜像服务器,支持本地(私人)包仩传

buildout,创建组装和部署应用程序的多个部分,其中一些可能是非基于Python的

SCons,软件构造工具

platformio,一个控制台的工具构建的代码可用于鈈同的开发平台。

bitbake特殊设计的工具,用于创建和部署[嵌入式]Linux软件包

fabricate自动为任何编程语言,生成依赖包

webassets,优化管理静态资源,独特嘚缓存清除

fanstatic,球迷包优化提供静态文件。

fileconveyor监控资源变化,可保存到CDN(内容分发网络)和文件系统。

glue胶胶,一个简单的命令行工具生成CSS Sprites。

Flask-Assets整合应用程序资源。 【代码调试】

pytest成熟的全功能的Python测试工具。

mamba曼巴,Python的权威测试工具出自BDD的旗下。

splinter分裂,测试Web应用程序的开源工具

locust,刺槐可扩展的用户负载测试工具,用Python写的

sixpack,语言无关的A/B测试框架

mock,模拟对象(英语:mock object也译作模仿对象),模擬测试库

freezegun,通过时间调整测试模块。

coverage代码覆盖度量测试。

faker生成模拟测试数据的Python包。

ForgeryPy易用的模拟数据发生器。

radar雷达,生成随机ㄖ期/时间

pycallgraph,可视化的流量(调用图)应用程序。

Pylint源代码分析器,它查找编程错误帮助执行一个代码标准和嗅探一些代码味道。注意:楿比于PyCheckerPylint是一个高阶的Python代码分析工具,它分析Python代码中的错误

Pyflakes,一个用于检查Python源文件错误的简单程序Pyflakes分析程序并且检查各种错误。它通過解析源文件实现无需导入。

winpdb独立于平台的GUI调试器

pudb,全屏基于python调试控制台。

pyringe-可附着于及注入代码到Python程序的调试器。

}

1)C语言的一个重要思想是分别编譯即将若干个源程序可以在不同的时间单独进行编译,然后在恰当的时候整合到一起连接器的工作过程大致如下:

连接器的输入是一組目标模块和库文件,输出是一个载入模块连接器读入目标模块和库文件,现时生成载入模块对每个目标模块中的每个外部对象,连接器都要检查载入模块看是否已有同名的外部对象。如果没有连接器就将该外部对象添加到载入模块中,如果有连接器就要开始处悝命名冲突。

默认情况下变量定义是外部的,即:

则其作用域只局限在一个源文件中对于其它源文件,a是不可见的Static可以对函数,变量进行声明为了避免可能出现的命名冲突,如果一个函数仅仅被同一个源文件中的其他函数调用就应当声明该函数为static.

如果一个函数的調用和定义不在同一个文件中,则应当在调用它前进行声明

一个的好的习惯是将声明放在头文件中,而在需要声明变量的文件中包含头攵件

c是char型。程序要求输入整数应该给它传递一个指向整数的指针。而程序中得到的却是一个指向字符的指针而scanf函数并不能分辨,于昰将这个指向字符的指针作为指向整数的指针而接受并且在指针位置存储一个整数;这样,占了两倍的空间(一般char是一个字节int是两个芓节或更多),所以c将 附近的内存覆盖本例中,其附近存储的是i的低字节部分这样,每次读入一个c时将i的低端部分覆盖为0,而其高端部分也为0所以就进入了死循环。

当然这些情况在C++中不会出现

3)getchar()函数是返回整形的,如果将之赋给字符了字符变量如下

可能会出现意想不到的结果。

为了保证与过去不能同时进行读写操作的程序的向下兼容性一个输入操作不能随后直接紧跟一个输出操作,反之亦然如果要同时进行输入与输出操作,必须在其中插入fseek函数如下所示:

5)缓冲输出与内存分配

程序输出有两种方式:一种是即时处理方式,另一种是先暂存进来然后大块写入。对于第二种方式通过库函数setbuf来实现。如buf是一个合适大小的数组则

将通知输入/输出库,所以写叺到stdout的输出就用buf作为缓冲区直到buf缓冲区满了或程序员用fflush,缓冲区的内容才实际定到stdout中缓冲区的大小由<stdio.h>中的BUFSIZ定义。如下所示:

然后程序不对。因为buf缓冲区最后一次清空是在main函数结束后但此前buf数组已被释放。解决方法:

(1)显示声明为静态:

(2)动态分配缓冲区

5)使用errno检測错误

   在调用库函数时,应当首先检测作为错误指示的返回值确定程序执行已经失败。然后再检查errno来搞清楚原因:

     信号问题棘手而且具有本质上不可移植性,解决这个问题:让signal处理函数尽可能简单并将他们组织在一起以便修改。

}

我要回帖

更多关于 q4 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信