Python 学习路线图

在这个系列笔记中,我将陆续整理自己在学习 Python 编程语言及其框架的过程中留下的笔记和代码,目的是掌握如何在生产环境中利用各种领域的第三方框架来快速开发应用程序。和大多数学习过程一样,我需要在第一部分笔记中花费一点篇幅来鸟瞰一下 Python 语言所涉及的领域,以便从全局视野来规划接下来的学习路线图,为此,我会在https://github.com/owlman/study_note项目的Programming/LanguageStudy/Python目录下创建一个名为的RouteMap目录,用于存放并维护接下来的这一部分笔记。

程序库与框架概览

诚如大家所知,Python 是当前在程序设计领域中最为热门的、解释型的高级编程语言之一。它支持函数式、指令式、结构化和面向对象编程等多种编程范型,且拥有强大的动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛的标准库。这些特性可以帮助使用这门编程语言的程序员在参与各种规模的项目时编写出思路清晰的、合乎逻辑的代码。在使用 Python 编写代码时,开发者们通常会遵循“优雅、明确、简单”的核心准则,具体来说就是:

优美优于丑陋。明了优于隐晦。
简单优于复杂。复杂优于凌乱。
扁平优于嵌套。稀疏优于稠密。
可读性很重要。

上述准则确保了开发者们在使用 Python 语言时一般会拒绝花俏的语法,而选择明确且尽可能没有歧义的语法。当然了,对于这些准则的坚守也导致了 Python 社区对于牺牲了优雅特性的优化策略持有了较为谨慎的态度,一些对非重要部分进行性能优化的补丁通常很难被获准合并到 Python 的官方实现 CPython 项目中,这也限制 Python 在某些对执行速度有较高要求领域的使用。到目前为止,人们主要将 Python 应用于以下领域,并开发了相应的程序库与框架:

  • 科学计算:在这一领域,我们可以选择使用 Numpy、Scipy、pandas、matplotlib 等框架进行各种科学数值计算,并生成相关的数据报告或图表;
  • 网络爬虫:在这一领域,我们可以选择使用 Scrapy 这个轻量级的框架来从指定的网站中收集有用的数据;
  • Web 开发:在这一领域,我们可以选择使用 Django、Web2py、Bottle、Tornado、Flask 等框架来开发个人博客、线上论坛等 Web 应用程序以及基于 HTTP 协议的应用程序服务端;
  • 游戏开发:在这一领域,我们可以选择使用 PyGame、PyOgre、Obespoir 等框架来开发俄罗斯方块、贪吃蛇这样的二维或三维的游戏。
  • 图形化界面开发:在这一领域,我们可以选择使用 PyQT、WxPython 等框架来实现带有图形界面的应用程序。
  • 网络编程:在这一领域,我们可以选择使用 Twisted 框架来开发基于多种网络协议的应用程序,该框架支持的协议既包括 UDP、TCP、TLS 等传输层协议,也包括 HTTP、FTP 等应用层协议;
  • 人工智能:在这一领域,我们可以选择使用Dpark、NLTK、tensorflow等框架来数据挖掘、自然语言处理、机器学习等方向上的工作;
  • 自动化运维:在这一领域,我们可以选择使用 Buildbot 框架来实现自动化软件构建、测试和发布等过程。每当代码有改变,服务器要求不同平台上的客户端立即进行代码构建和测试,收集并报告不同平台的构建和测试结果;
  • 自动化测试:在这一领域,我们可以选择使用 Selenium、Robot framework 等框架来实现自动化的图形界面测试、接口测试、兼容性测试等;

基本上,除了基本语法之外,一个 Python 开发者的能力实际上就取决于如何根据自己面对的问题找到适用的框架,并在合理的时间内掌握该框架的使用方法,并用它快速地构建自己的项目。在后续笔记中,我们将会利用具体的项目实践来介绍如何构建这种“在做中学,在学中做”的能力。

规划路线图

在了解以上基本概念之后,接下来就可以来具体规划一下要学习如何使用Python语言进行框架开发的学习路线图了。大致上,我们可以将路线图划分为以下三个里程碑。

掌握 Python 语言的基础

要想学习接下来要介绍的内容,掌握 Python 语言的基本语法及其标准库的使用方法无疑是先决条件。虽然在这个系列笔记中,我们会设定自己已经掌握了这门语言的基本使用,但对于“掌握”程度,我们还是希望先和读者约定以下标准。首先,自然是要能正确地安装 Python 语言运行环境,掌握这一能力的标准是读者能在自己的计算机环境中顺利地执行以下 Hello World 程序:

#! /usr/bin/env python

def main():
print("hello world!") if __name__ == '__main__':
main()

接下来,读者需要掌握的是 Python 语言的标准语法,包括灵活运用各种表达式语句、条件语句、循环语句,以及会使用标准库提供的各种数据类型和数据结构,掌握这一能力的标准是能理解下面代码中实现的各种排序算法,并能正确地调用它们:

#! /usr/bin/env python

import random

def selectionSort(coll):
if(coll == []): return []
for i in range(len(coll)-1,0,-1):
max_j = i
for j in range(i):
if coll[j] > coll[max_j]: max_j = j
coll[i], coll[max_j] = coll[max_j], coll[i] return coll def countingSort(coll):
if(coll == []): return []
endl = len(coll)
minv = min(coll)
maxv = max(coll)
temp = [0 for i in range(maxv - minv + 1)] for i in range(endl):
temp[coll[i] - minv] += 1
index = 0
for i in range(minv, maxv + 1):
for j in range(temp[i - minv]):
coll[index] = i
index += 1
return coll def radixSort(coll, length):
if(coll == []): return [] for d in xrange(length):
LSD = [[] for _ in xrange(10)]
for n in coll:
LSD[n / (10 ** d) % 10].append(n)
coll = [tmp_a for tmp_b in LSD for tmp_a in tmp_b] return coll def bucketSort(coll):
if(coll == []): return [] length = len(coll)
buckets = [[] for _ in xrange(length)]
for tmp_a in coll:
buckets[int(length * tmp_a)].append(tmp_a)
tmp_coll = []
for tmp_b in buckets:
tmp_coll.extend(insertSort(tmp_b)) return tmp_coll def insertSort(coll):
if(coll == []): return []
for i in range(1,len(coll)):
j = i
while j > 0 and coll[j-1] > coll[j]:
coll[j-1], coll[j] = coll[j], coll[j-1]
j -= 1 return coll def shellSort(coll):
if(coll == []): return []
size = len(coll)
step = size / 2
while(step >= 1):
for i in range(step, size):
tmp = coll[i]
ins = i
while(ins >= step and tmp < coll[ins - step]):
coll[ins] = coll[ins - step]
ins -= step
coll[ins] = tmp
step = step / 2 return coll def bubbleSort(coll):
if(coll == []): return []
endl = len(coll)
for i in range(endl, 0, -1):
for j in range(0, i - 1):
if(coll[j] > coll[j + 1]):
coll[j], coll[j + 1] = coll[j + 1], coll[j] def quickSort(coll):
if(coll == []): return []
return quickSort([x for x in coll[1:] if x < coll[0]]) + \
coll[0:1] + \
quickSort([x for x in coll[1:] if x >= coll[0]])

最后,在最理想的情况下,读者还应该具备一些针对某一特定任务来编写自动化脚本的能力,例如能理解并复述下面这段实现 Git 提交操作的自动化脚本。

#! /usr/bin/env python

import os
import sys
import time if not len(sys.argv) in range(2, 4):
print("Usage: git_commit.py <git_dir> [commit_message]")
exit(1) title = "= Starting " + sys.argv[0] + "...... ="
n = len(title)
print(n*'=')
print(title)
print(n*'=') os.chdir(sys.argv[1])
print("work_dir: " + sys.argv[1])
if len(sys.argv) == 3 and sys.argv[2] != "":
commit_message = sys.argv[2]
else:
commit_message = "committed at " + time.strftime("%Y-%m-%d",time.localtime(time.time())) os.system("git add .")
os.system("git commit -m '"+ commit_message + "'") print("Commit is complete!") print(n*'=')
print("= Done!" + (n-len("= Done!")-1)*' ' + "=")
print(n*'=')

如果读者在基于以上标准的自我检验中遇到了一些不可回避的问题,我们会强烈建议先回过头去补习一下 Python 语言的基础知识,例如去阅读一下《Python 基础教程》或者其他介绍了上述基础的书籍,等达到了我们在这里约定的对基础知识的“掌握”标准,再继续学习后面的内容,以便实现最好的学习效果。

掌握快速上手框架的能力

这一里程碑主要聚焦的是可持续之学习能力。众所周知,在如今的软件开发活动中,我们可以选择的开发框架不仅琳琅满目,选择众多,而且新陈代谢极为快速。这意味着,即使某一本书介绍了当前最为流行的框架及其具体使用方法,很有可能等到它最终出版之时,开发者们已经有了更好的选择。所以授之以鱼不如授之以渔,真正的目的是要掌握“快速学习新框架”的能力,这需要我们掌握如何阅读这些框架本身提供的官方文档,以便自行去了解这些框架的设计思路,并理解为什么决定开放那些接口给用户,为什么对用户隐藏那些实现。这就需要读者自己具备开发框架的能力。换句话说,虽然不必重复发明轮子,但一个优秀的工程师或设计师应该了解轮子是如何被发明的,这样才能清楚在怎么样的轮子上构建怎么样的车。

总而言之,对于如今的项软件工程师来说,在一个月内快速掌握某个新框架的能力远比之前已经掌握了多少个框架重要得多,例如当开发团队的管理员在面试新成员时,如果这位面试者有五年 A 框架的使用经验,那固然是很好,但团队中很多人都有,未必需要再多一个同类型的人才、但如果该面试者能在一个礼拜快速上手基于 Python 的任意一种框架,那么这位人才的重要性就会被凸显出来。毕竟如果我是一个开发团队的管理者,肯定不会喜欢团队的成员告诉我这个不会,那个不会。


已完成

Python 学习路线图的更多相关文章

  1. Python学习路线图

    文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 Python学习路线图你可以通过百度云盘下载观看对应的视频 链接: http://pan.baidu.com/s/1c2zLllA ...

  2. Python基础入门教程,Python学习路线图

    给大家整理的这套python学习路线图,按照此教程一步步的学习来,肯定会对python有更深刻的认识.或许可以喜欢上python这个易学,精简,开源的语言.此套教程,不但有视频教程,还有源码分享,让大 ...

  3. 新手如何学习python(python学习路线图)

    现在互联网巨头,都已经转投到人工智能领域,而人工智能最好的编程语言就是python,未来前景显而易见.这是小编给大家整理的python学习路线图,按照此教程一步步的学习来,肯定会对python有更深刻 ...

  4. python学习教程,史上最全面的python学习路线图

    Python 是Web 开发.游戏脚本.计算机视觉.物联网管理和机器人开发的主流语言之一,随着Python用户可以预期的增长,它还有机会在多个领域里登顶.Python学习路线分享给你. 阶段一是Pyt ...

  5. 最全Python学习路线图【2020最新版】

    2020年最新的python学习大纲,专为python高薪打造另外很多人在学习Python的过程中,往往因为没有好的教程或者没人指导从而导致自己容易放弃,为此我建了个Python交流.裙 :一久武其而 ...

  6. Python学习路线图(2020年最新版)

    这是我刚开始学习python时的一套学习路线,从入门到上手.(不敢说精通,哈哈~) 希望对大家有帮助哈~ 一.Python入门.环境搭建.变量.数据类型 二.Python运算符.条件结构.循环结构 三 ...

  7. Python学习路线图【转载】

    文章来源:https://blog.csdn.net/u014044812/article/details/88079011

  8. python学习路线以及视频下载

    作者:林其链接:https://www.zhihu.com/question/19660572/answer/194904019来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  9. IT开发、PM、UI/UE学习路线图(非原创-参考传智播客网站介绍)

    文章大纲 一.Go语言+区块链学习路线图二.PHP学习路线图三.Python学习路线图四.C/C++学习路线图五.大数据学习路线图六.经理学习路线图七.UI/UE路线图八.参考文章 一.Go语言+区块 ...

  10. Python学习教程:Pandas中第二好用的函数

    从网上看到一篇好的文章是关于如何学习python数据分析的迫不及待想要分享给大家,大家也可以点链接看原博客.希望对大家的学习有帮助. 本次的Python学习教程是关于Python数据分析实战基础相关内 ...

随机推荐

  1. 在 Rainbond 上使用在线知识库系统zyplayer-doc

    zyplayer-doc 是一款适合企业和个人使用的WIKI知识库管理工具,提供在线化的知识库管理功能,专为私有化部署而设计,最大程度上保证企业或个人的数据安全,可以完全以内网的方式来部署使用它. 当 ...

  2. xtrabackup+MySQL8全备+增备脚本

    问题描述:运用xtrabackup进行mysql全备,mysql8之前使用的是innodbxtrabackup,mysql8之后开始使用xtrabackup,innobackupex把功能都集成到xt ...

  3. python+folium

    建模时无意中发现了一个很好用的交互式画地图的库!!

  4. 记一次 .NET 某外贸ERP 内存暴涨分析

    一:背景 1. 讲故事 上周有位朋友找到我,说他的 API 被多次调用后出现了内存暴涨,让我帮忙看下是怎么回事?看样子是有些担心,但也不是特别担心,那既然找到我,就给他分析一下吧. 二:WinDbg ...

  5. 前端模拟“多线程”提交Http请求

    首先说,javascript没有多线程这样一个说法,我说的只是类似那种效果.其次,不建议使用这种方式解决问题,多线程应该交给后台去做. 但是,如果非要这样用,有什么方法呢? 我在工作中就遇到了这样的问 ...

  6. 2022-11-01:给定一个只由小写字母和数字字符组成的字符串str。 要求子串必须只含有一个小写字母,数字字符数量随意。 求这样的子串最大长度是多少?

    2022-11-01:给定一个只由小写字母和数字字符组成的字符串str. 要求子串必须只含有一个小写字母,数字字符数量随意. 求这样的子串最大长度是多少? 答案2022-11-01: 经典的滑动窗口问 ...

  7. ET框架6.0分析二、异步编程

    概述 ET框架很多地方都用到了异步,例如资源加载.AI.Actor模型等等.ET框架对C#的异步操作进行了一定程度的封装和改造,有一些特点: 显式的或者说强调了使用C#异步实现协程机制(其实C#的异步 ...

  8. Django4全栈进阶之路8 createsuperuser创建超级管理员账号

    在 Django 4 中,可以使用 createsuperuser 命令来创建超级管理员账号.超级管理员拥有管理后台的所有权限,包括创建.编辑和删除用户.组.权限等操作. 下面是创建超级管理员账号的步 ...

  9. Javascript 常见的循环方式总结

    本文地址: https://www.cnblogs.com/zichliang/p/17412968.html 在Javascript中有很多种循环方式.有多种循环方式可以用来遍历数组.对象.以及执行 ...

  10. 【Java】水果超市管理系统

    前言 说是个系统,看着像实训的产物,但实际上这是Java课程最后一个关于jdbc的大实验,yes,挺大的. 过程 看着视频里的一堆一堆的文件,逻辑混乱的讲解,我决定 我自己写这个系统 说干就干: 分析 ...