Python 的练手项目有哪些值得推荐?

news/2024/7/3 1:10:16

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

a654ee8ea08575f0694c81f13e9b2d15.png

6aa8731c5b2b311907a387f0f1cca0b1.png

今天要推荐一本非常著名的开源书籍:《500 Lines or Less》。

在开始正题之前,先介绍一下它所属的系列。该系列叫 AOSA,是“The Architecture of Open Source Applications”的简称,即“开源程序的体系结构”,目前有四本书,本期主角是最近的一本(发布于 2016.7.12)。

这个系列最初的目的是:研究那些优秀的开源项目,从中吸取精华的实践经验。

在前三本书中,研究对象已多达 50 几个,其中不乏名头响亮者,例如 Eclipse、Selenium、Git、matplotlib、nginx、Puppet、Pypy、SQLAlchemy 与 Twisted 等等。

每个章节的作者都是开源软件的核心参与者,介绍了项目是如何设计的、为什么这样设计、主要的组成部分是什么、各模块间如何互动、开发中的优秀成果有哪些……

这些书拆解了开源界的明星项目,通过阅读,你能了解到开源作者们的思考方式,了解到各类困难问题的解决方案,学习使用现成的轮子。所谓见多识广,学习吸取经验,有望“站在巨人的肩膀上”。

但是,这几本书主要偏向于架构和工程方面,项目代码量基本是几千上万行,对于初级程序员来说不够实用,想要吃透,挑战性太大。

针对这个问题,该系列新出了一本《500 Lines or Less》,专注于 500 行或更少代码的小型项目。

69c2bb29795db40acacda90ce0d53fb8.png

关注编写代码时所作出的设计决定与权衡

  • 为什么要使用一些接口将应用程序分成不同的模块?

  • 为什么在这里使用继承,在别处使用封装?

  • 如何预测程序的扩展,如何让其他程序员轻松实现?

简而言之,这本书聚焦于一些相对较小但又很具代表性的课题,并通过 500 行以内的代码来实现它。

098040208a04809980d39be11376ca0c.png

书中写了 22 个项目,下面逐一简介:

1、Blockcode: A visual programming toolkit(可视化编程工具包)

使用语言:HTML、CSS、JavaScript

该项目基于开源的 Waterbear 工具,提供可视化的操作界面,通过简单而直观的交互方式,实现图形编程。

1f901e7a1c39c120c00238b89eb36178.png

2、A Continuous Integration System(持续集成系统)

使用语言:Python 2

CI 是软件开发中重要的持续集成系统,保障新功能的稳定实现。这个项目介绍了 CI 系统的工作原理,并尝试构建自己的 CI 系统,实现监听器、测样例调度器和测试运行器。

d3088f432cff025ac4663043bc336741.png

3、Clustering by Consensus(分布式系统)

使用语言:Python

探索如何实现一个网络协议,用于可靠的分布式计算。为了解决共识性问题,使用了 Paxos 算法的衍生 Multi-Paxos。学习这个项目,能接触很多分布式的知识。

dd2a7479e20f8811d9aee61116810fdc.png

4、Contingent: A Fully Dynamic Build System(动态构建系统)

使用语言:Python

构建系统(build system)用于将源代码生成用户可用的目标(如库、可执行文件、脚本等),常见的有 GNU Make、CMake、Apache Ant 等。Python 中的 PyInstaller 也是构建系统的一种。本项目实现了一个构建系统,且试图对“动态交叉引用”问题提出一个解决方案。

0db60e8044c1a391a8a3a1b6290876f6.png

5、A Web Crawler With asyncio Coroutines(使用协程实现的爬虫)

使用语言:Python

作者之一是 Python 之父(Guido van Rossum),使用标准库 asyncio  实现异步的网页爬虫。(学习爬虫者必看)

6、Dagoba: an in-memory graph database(内存中的图形数据库)

使用语言:JavaScript

图形数据库是 NoSQL 数据库的一种,使用图形理论来存储实体间的关系。这个项目介绍了图形数据库要解决的几个问题,然后将它实现。

7、DBDB: Dog Bed Database(狗床数据库)

使用语言:Python

用 Python 实现一个简单的键值对存储数据库(key/value database),其特点是在电脑崩溃或程序出错时,也能保证数据的安全。学习这个项目,可以掌握关于数据库的一些核心特性,例如原子性(atomicity)、一致性(consistency)、独立性(isolation)和持久性(durability)。

8、An Event-Driven Web Framework(事件驱动的Web框架)

使用语言:Common Lisp

构建一个以事件驱动的 Web 框架,使用 HTTP 做通信协议。

9、A Flow Shop Scheduler(流水车间调度器)

使用语言:Python 2

流水车间调度问题是查找最优解问题的一种,本项目基于局部搜索(local search)方法,实现流水车间调度器。

10、An Archaeology-Inspired Database(受考古学启发的数据库)

使用语言:Clojure

主流的数据库是面向空间编程 (place-oriented programming),即在更新数据的时候,新数据会占据老数据的空间。本项目开了个脑洞,用考古学家的视角设计数据库,记录数据的所有变化轨迹,更新数据时并不删除老数据。最终实现代码仅 360 行,作者称这个数据库为CircleDB

bfa60d6ee319f547ca8ce4f7584450aa.png

11、Making Your Own Image Filters(图片滤镜)

使用语言:Java

Processing 是一种用 Java 构建的开发环境,本项目介绍了它的特性与配置,并最终实现自己的滤镜 APP。功能比较简单,但实现过程涉及很多图像处理的内容。

40f6856b81e2afd8d6d67f452a6475d8.png

12、A Python Interpreter Written in Python(Python解释器)

使用语言:Python

它的结构跟 CPython 解释器差不多,作者命其名为 Byterun。文中详细讲解了解释器的工作原理,跟着学习,将极有帮助。

b4e989db33c5e828ff9b447efeec3613.png

13、A 3D Modeller(3D建模)

使用语言:Python

3D 图形化编程,使用 OpenGL 来渲染图形。

b24847103d7a1eaea3d458f9a0b6d8d6.png

14、A Simple Object Model(对象模型)

使用语言:Python

当今最主流的编程范式依然是面向对象编程,而它的核心则是对象模型。编写一些简单的对象模型可以更好地理解现有语言的内部工作原理,并且深入地了解面向对象语言的设计理念。

ef0de85ee6adc21444266eee1cea4709.png

15、Optical Character Recognition (OCR,光学字符识别)

使用语言:Python、JavaScript、HTML

基于人工神经网络(ANNs)实现的简单 OCR 系统,并设计了一个 Web 客户端。

16、A Pedometer in the Real World(现实计步器)

使用语言:Ruby

计步器的设计依据是什么,如何在现实世界中把它实现呢?该文回答了这个问题,它还设计了一个友好的 Web 界面。

14729f6e433d69d07d9bdcd0299c9869.png

17、The Same-Origin Policy(同源策略)

使用语言:Alloy

同源策略(SOP)是当今浏览器中安全机制的重要组成部分,用于控制浏览器中脚本间的通信。文中使用 Alloy(一种用于建模与分析软件设计的语言)来构建一个可执行的 SOP 模型。

9f6a350a5c46a7b538bfa35d2a2962b5.png

18、A Rejection Sampler(采样器)

使用语言:Python

“采样”是指从一些概率分布中生成随机数,文中介绍了如何从非标准的概率分布里进行采样,以及如何计算样本在分布里对应的概率。

19、Web Spreadsheet(Web 电子表格)

使用语言:HTML、CSS、JS

电子表格是办公软件的必备,我们最熟知的是微软的 Excel。文中用 AngularJS 框架来实现一个简单的 Web 电子表格,所用代码仅 99 行。效果查看:https://audreyt.github.io/500lines/spreadsheet

20、Static Analysis(静态分析)

使用语言:Julia

“静态分析”指的是在不运行代码的情况下检查代码(类型、格式、编码规范等等),这项工作通常是由各种 IDE 编辑器来完成。本项目使用 Julia,实现了一些基本的静态分析功能。

21、A Template Engine(模板引擎)

使用语言:Python

“模板引擎”是 Web 开发中很重要的东西,支持将用户界面与实际业务数据分离,通过它可生成标准的 HTML 文档。文中所用的模板引擎语法基于 Django,总代码量仅 262 行。

22、A Simple Web Server(Web服务器)

使用语言:Python、HTML

实现了一个简单的 Web 服务器,主要使用了标准库中的BaseHTTPServer。另外,它还介绍了 CGI(通用网关接口) 协议,给服务器实现了运行外部程序的功能。

ca5190cf077edb6df1ba9729e50dfb6b.png

所有项目介绍完毕。可以看出,22 个项目中有 13 个使用了 Python,占60%,难怪网上有些不明真相的同学直呼它是“一本Python神书”。

有些项目初看的话,你难以想象只需不到 500 行代码就能实现,但是经过必要的问题裁剪,并使用恰当的现成轮子(开源库、工具、框架等),就能取得简单的成果。

与之相对的,不要以为 500 行以内的项目就很简单。每个项目的作者都大有来头(连 Python 之父都亲自上阵啦),文章中写到的技术背景、实现原理以及设计思路,全都值得仔细研读(很多还不一定能读懂)。

这本书是开源的,在官网上可以免费阅读。它还配套了 Github 仓库,存放了完整的项目代码,目前已经获得 20000 多颗星星啦。

Github 上有对它的中文翻译计划,但是翻译者寥寥,只有 10 几篇翻译了出来,翻译质量还不敢恭维。

02634e5d992f9f47aa1274a54a42edf6.png

不管如何,这么优质而诚意十足的开源书籍,非常值得推荐!作为咱们 Python 猫荐书系列的第八期,也非常合适。

最后附上该书在开篇中的寄语:

We hope that the experiences of the authors in this book will help you grow out of your comfort zone in your own programming practice.

我们希望本书作者的经验能够帮助您在自己的编程实践中成长。

相关链接:

书籍官网:http://aosabook.org/en/index.html

Github英:https://github.com/aosabook/500lines

Github中:https://github.com/HT524/500LineorLess_CN

3c52b7d00cbc25e1bf8c0e7dd3035aa0.gif

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

83514f328d09bf733ec73944723d4318.png

5125505879cf54c027eaf796c7e88ff8.png


http://lihuaxi.xjx100.cn/news/270360.html

相关文章

用python写web网页实现音乐数据库查询_使用python实现音乐播放器代码实例

内核播放模块(pygame核心)import timeimport pygameimport easygui as guifile rD:\CloudMusic\G.E.M.邓紫棋,艾热 - 光年之外 (热爱版).mp3 #这里为音乐文件路径pygame.mixer.init()gui.msgbox("正在播放"file)track pygame.mixer.music.load(file)pygame.mixer.m…

js的全部替换函数replaceAll

JS替换功能函数,用正则表达式解决,js的全部替换,学习js的朋友可以参考下。 alert("abacacf".replace(a,9)); alert("abacacf".replace(/a/g,9)); 第一个运行的结果 9bacaf 这个只是替换了第一个 第二个运行的结果 9b9c9f…

为什么有些公司不让用 Lombok ?

点击上方蓝色“方志朋”,选择“设为星标”回复“666”获取独家整理的学习资料!不得不承认,Lombok 是一个很不错的 Java 库,它可以让你在少写代码的同时耍耍酷,简单的几个注解,就可以干掉一大片模板代码。但…

[002] The Perks of Being a Wallflower - 读后记

The Perks of Being a Wallflower 今天(2015年10月30日 18:26:17)读完"The Perks of Being a Wallflower". 本书290页,我是在小米pad上完成阅读的,epub格式,花费四天时间,每天至少5小时. 生词很多,就不一一列出了. 使用透析法并不强求完全的正确理解原文.强调完整的阅…

基于Python的OpenCV轮廓检测聚类

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达简介OpenCV的“findContours”功能经常被计算机视觉工程师用来检测物体。OpenCV的存在,使得我们只需要编写几行代码就可以检测轮廓(对象&#xff0…

为了杀蚊子,这位博士用树莓派DIY了一把激光枪!网友:伤到人怎么办?

点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达来源:学术头条本文约1057字,建议阅读3分钟。本文介绍了国外博士用树莓派DIY了“高端”灭蚊激光枪。世人苦蚊子久矣。尤其在夏夜,耳边嗡嗡…

变换判断滤波器类型_7.4 低通IIR滤波器的频率变换

本文将会介绍,怎样将一个离散型低通滤波器转换为其他的选频滤波器。设计连续时间选频滤波器的传统方法都是首先设计一个频率归一化的原型低通滤波器,然后用一个袋鼠变换,从原型低通滤波器推出期望的滤波器。一般在设计离散时间选频滤波器的时…

BCH专属“谷歌地图”凸显BCH魅力

2019独角兽企业重金招聘Python工程师标准>>> 在我们的日常生活中,地图作为一种工具给我们带来了很多便利。尤其是类似于谷歌地图、百度地图这些电子地图不仅仅有地图的功能,能为我们提供路线导航,更是综合了很多功能,例…