代码写多了,就会有一个感觉,不同项目之间,其实有一些基础功能函数是可以共用的。于是,我把自己的这部分共用函数,做成了common库。

common这个项目很简单,就是把自己在各个不同项目中可以共用的基础函数汇总起来,形成一个独立的项目库,并对每个函数配上单元测试!

Python函数库

$ python3 -m pydoc common

$ python3 test.py test_common_py

C排序函数库

我把主流的内部排序函数都写了一遍,所有函数都是线程安全的,可重入的,并且在执行失败时,输入的int array保持原样。这部分函数的单元测试使用Python,用python的unittest框架测试.so中的C函数接口。

$ python3 test.py test_common_c test_sort_c

排序函数的时间测试

用python的timeit模块测试各个排序函数的执行时间,使用相同的数据。同时一并将python和numpy的排序函数一并测试了:

$ python3 test_sort_time.py

如下是我在自己的i3电脑上的测试结果:

$ python3 test_sort_time.py

# test sort time (cpu) with same data:

sizeof(int) = 4

sizeof(size_t) = 8

Data1: 200000 integers in random from -500 to 500 (many duplicated)

algo name time(s)

1 count 0.0004098210

2 radix 0.0078493200

3 btree 0.0103174390

4 merge_r 0.0118437550

5 merge 0.0126967190

6 qsort(glibc) 0.0164184000

7 shell 0.0168394210

8 np.sort(numpy) 0.0193520060

9 quick 0.0204938350

10 heapify 0.0206660650

11 shell2 0.0211150230

12 list.sort(python) 0.0245994310

13 sorted(python) 0.0283234870

14 binsert2 1.3200866190

15 binsert 1.3212886200

16 insert2 4.3334431380

17 insert 4.4169052290

18 selects 9.8839823420

19 bubble 57.5378292150

Data2: 200000 integers in random from -2147483648 to 2147483647

algo name time(s)

1 merge_r 0.0149472760

2 merge 0.0154368890

3 quick 0.0170181770

4 qsort(glibc) 0.0188416350

5 shell 0.0199692830

6 heapify 0.0214382860

7 np.sort(numpy) 0.0234466090

8 shell2 0.0247646730

9 radix 0.0257750700

10 btree 0.0553454840

11 list.sort(python) 0.0607240240

12 sorted(python) 0.0658427440

13 binsert2 1.3145383520

14 binsert 1.3212747060

15 insert2 4.3275937470

16 insert 4.3964931220

17 selects 9.8862850800

18 bubble 57.4958768850

19 count E:3

项目管理工具

我在这个项目上,已经尽心写了docstring。而且,从这个项目开始使用flake8!因此,tox.ini文件对我而言,也是各项目通用。从这个项目开始,Python与C的混合编程测试,全部用python做单元测试。

单元测试很重要,如下是我对单元测试的一点思考:

Remember:

1, unit test could not kill all bugs, but you will come across more bugs if there is not unit test.

2, unit test is the key to practice TDD and give you confidence of your code.

3, unit test can help you thinking and designing code in a more layered way.

4, If you find the code is hard to do unit test, maybe there is a chance to refactor it.

5, Coding while testing is my best practice, why not keep the test code decently! You will find them useful all the time.

版本

2021年1月9日:V0.06

修改bug,优化编码,排序算法全部增加线程安全;

重写test_sort_time.py;

2020年12月30日:V0.05

基本完成所有排序算法的编写和测试;

基本完成排序算法的时间测试;

2020年11月26日:V0.04

开始python与C的混合编程,通过ctypes调用C函数;

继续增加函数,包括部分C函数;

更新README.md文件,不再写一大堆了。

2020年10月25日:V0.03

增加在不中断TCP时,解决不定长消息交互的 tsend_all 和 trecv_all 函数;

其它一些细节优化。

2020年10月9日:V0.02

增加5个函数,现在有26个函数。

2020年9月13日:V0.01

首批21个函数

-- EOF --

python中的common_common:个人基础函数库相关推荐

  1. Python中常用最神秘的函数! lambda 函数深度总结!

    今天我们来学习 Python 中的 lambda 函数,并探讨使用它的优点和局限性 Let's do it! 什么是 Python 中的 Lambda 函数 lambda 函数是一个匿名函数(即,没有 ...

  2. 不是python中用于开发用户界面的第三方库-模拟试卷C

    原标题:模拟试卷C 一.单项选择题 1. 按照"后进先出"原则组织数据的数据结构是____ 队列 栈 双向链表 二叉树 2. 以下选项的叙述中,正确的是 循环队列有队头和队尾两个指 ...

  3. python编辑word书签_小伙发现了Python中编写word文档的库,编辑文字方便多了

    新的一年,小编又和大家见面啦.十分开心又和大家分享干货了~ Word文档相信广大的办公室家族并不陌生吧?今天咱们聊聊Python中一个可以用来读写word文档的Python库,编辑文档分分钟的事情哦~ ...

  4. python中实现延时回调普通函数示例代码

    这篇文章主要给大家介绍了关于python中实现延时回调普通函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. 回调函 ...

  5. Python中常用的高阶函数

    Python 中常用的高阶函数 ① filter(function,iterable)filter(function, iterable)filter(function,iterable)   过滤器 ...

  6. Python中的startswith和endswith函数使用实例

    Python中的startswith和endswith函数使用实例 在Python中有两个函数分别是startswith()函数与endswith()函数,功能都十分相似,startswith()函数 ...

  7. python整数转换字符串_使用Python中的str()函数将整数值转换为字符串

    python整数转换字符串 Given an integer value and we have to convert the value to the string using str() func ...

  8. python中zip的使用_浅谈Python中的zip()与*zip()函数详解

    前言 1.实验环境: Python 3.6: 2.示例代码地址:下载示例: 3.本文中元素是指列表.元组.字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表). zip(*iterables ...

  9. Python中使用random随机函数与Matplotlib库绘制随机漫步图

    Python中使用random随机函数与Matplotlib库绘制随机漫步图 一.概述 随机现象在我们的生活中并不少见,我们常见的一次抛硬币的正反面,股票的走势等等,都是随机事件.这些不确定性事件给我 ...

  10. python一行输出多个数据_如何在Python中让两个print()函数的输出打印在一行内?

    1.两个连续的print()函数为什么在输出时内容会分行显示? 解:print()中有两个默认参数sep和end,其中sep是代替分隔符,end是代替末尾的换行符,默认使用','代替空格,且默认末尾加 ...

最新文章

  1. 转载CopyOnWriteArrayList
  2. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法
  3. 【声入人心:音频新体验】
  4. 2020全球工业互联网大会在沈阳召开,聚焦新业态、新模式,“新基建”促进国内国际双循环等热点
  5. 读书笔记_打开量化投资的黑箱11
  6. Win32 网络编程基本函数
  7. 机器学习第六回——无监督学习
  8. 拓端tecdat|R语言在BRFSS数据中可视化分析探索糖尿病的影响因素
  9. linux下多线程断点下载工具-axel
  10. 【网站排名软件】如何让网站关键词快速排名到首页
  11. 一步一步教你在Linux上搭建云服务器
  12. Linux系列八-type、alias与history
  13. Android性能优化的问题
  14. Android仿网易游戏的精美开场动画+动画基础详解
  15. Java语言基础大合集
  16. python利用列表计算斐波那契数列前30项并输出_python 题目:斐波那契数列计算;题目:站队顺序输出;题目:合法括号组合的生成;题目:用户登录(三次机会)...
  17. hander机制深入理解
  18. Initialization in《The Java® Virtual Machine Specification Java SE 7 Edition》
  19. 霍尔效应传感器特殊用法
  20. Knativa 基于流量的灰度发布和自动弹性实践

热门文章

  1. DedeCMS专题版块多种方法随意调用
  2. 2.性能之巅 洞悉系统、企业与云计算 --- 方法
  3. 1.PHP核心技术与最佳实践 --- 面向对象思想的核心概念
  4. 22. 用户身份切换用户的特殊 shell与 PAM模块
  5. 2、linux网络编程--无连接与面向连接的区别
  6. keyset与entryset
  7. IE下AjaxForm上传文件直接提示下载的兼容性Bug
  8. Alpha版本发布说明
  9. SharePoint 软件边界及限制
  10. Assembly初识