Intro
本篇文档是由近期给公司校招的新人(没有Python背景)准备的培训资料整理而来,学习计 划以学员的自学为主。根据实践平均每周学员需要花费1-2天的时间,每周再加上一个小时 跟踪和讲解相关内容。
教程并不是单纯的Python语言培训,侧重点在于让新人快速参与项目开发。
Python学习计划
受众
假定学员熟悉基本的编程概念,使用过Java/C/C++其中一门语言,有一定项目开发经验
目标
预计为期8周的阅读及学习计划,以完成每周设定的任务的方式引导学习Python语言以及 相关开发知识,帮助学员进行Python项目开发
需要完成的任务包括:
- 完成参考资料的阅读(扩展阅读不作要求)
- 完成一些具体的编程练习
- 阅读一些库的文档并编写例子初步掌握使用
进度反馈及跟踪
每周会有例会跟踪进度,平时的反馈我们可以通过邮件交流
randall.wjz@gmail.com
第1周 Intro
本周目标
在开始学习Python语言的具体知识细节前了解一些背景知识,以及设置一个Python开发环境
请完成以下材料的阅读
背景知识了解
-
简单的Python历史介绍
-
Python语言的设计哲学
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than right now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those! -
Python社区
- 社区
- PEP,中文翻译为Python增强提议。这个词经常在Python学习过程中看到,了解什么是PEP
- PSF,Python Software Foundation, Python软件基金会
- PyCon, 每年社区举办的Python开发者大会,youtube上可以找到与会演讲视频
-
了解Python2和Python3的现状
- Should I use Python 2 or Python 3 for my development activity?
- Python2版本将于2020年正式停止更新维护,Python语言的未来以及最新改进在Python3版本上进行
- 新项目应该默认使用Python3进行开发
- 现存的大量项目以及第三库使用Python2版本,流行的Python库大多兼容Python2/3版本
- 目前公司的项目使用Python2版本
编程环境设置
-
选择Python解释器
-
安装Python
-
了解pip
Python的包管理工具,类比Java语言的Maven工具
-
IDE & Editor
项目组使用PyCharm进行Python开发,请下载安装并熟悉使用
前端项目使用VS Code作为开发环境
编程练习
- 在本地安装设置好Python2.7开发环境
- 使用pip安装requests库,参考资料
- 安装并设置好PyCharm
- 使用PyCharm建立项目,编写程序使用requests使用GET请求访问 http://www.bing.com 并输出内容,参考资料
扩展阅读
- Python流行的第三方库支持Python3的情况
- 前端项目使用JavaScript Standard Style 作为代码风格标准
- pythonclock
第2周 开始Python学习
本周目标
本周将进行为期三周的Python语言学习,每周将指定的一些练习题目,请尝试完成(来源于Python Koan项目)。
阅读材料中将列出一些参考的Python学习教程,学员会有比较充足的时间进行自由的学习。
Python Koan项目
Python Koan是通过TDD进行Python学习的一个项目,项目地址 请下载并按照文档设置,注意我们使用python2文件夹下的代码
每个题目都关于Python语言的一个特性,完成题目可以帮助掌握这个特性。 如遇到题目涉及到的教程中没有提及的概念,可以跳过。 Python Koan 答案参考 (注意此答案使用Python3版本)
阅读材料
快速入门
- 写给有经验程序员的Python入门教程 快速了解Python特性
- Python 核心特性 Section 1-11
请完成以下教程
- Welcome to Python for you and me (比较简洁,PEP8 Guidelines,Virtualenv及之后章节可跳过)
编程练习 | 本周的Python Koan题目
- about~asserts~.py
- about~strings~.py
- about~none~.py
- about~lists~.py
- about~listassignments~.py
- about~dictionaries~.py
- about~stringmanipulation~.py
- about~tuples~.py
- about~methods~.py
- about~controlstatements~.py
- about~trueandfalse~.py
- about~sets~.py
第3周 继续Python Koan题目
本周目标
阅读材料
请完成以下教程
- Python官方入门教程 (阅读2-9章节即可)
编程练习 | 本周的Python Koan题目
- about~triangleproject~.py
- about~exceptions~.py
- about~triangleproject2~.py
- about~iteration~.py
- about~comprehension~.py
- about~generators~.py
- about~lambdas~.py
- about~scoringproject~.py
- about~classes~.py
- about~newstyleclasses~.py
- about~withstatements~.py
- about~monkeypatching~.py
- about~diceproject~.py
- about~methodbindings~.py
第4周 decorator and context manager
本周目标
相信大家对编程语言中的基于数据和基于函数的抽象都不陌生,现在来看一下Python对于基于语法的抽象的支持。
- 了解Python中装饰器(decorator)的概念
- 了解Python中上下文管理器(context manager)的概念
阅读材料
- 装饰器 简短介绍
- A guide to Python's function decorators
- 上下文管理器 简短介绍
- Python in the real world: Context Managers
编程练习 | 本周的Python Koan题目
- about~decoratingwithfunctions~.py
- about~decoratingwithclasses~.py
- about~inheritance~.py
- about~multipleinheritance~.py
- about~scope~.py
- about~modules~.py
- about~packages~.py
- about~classattributes~.py
- about~attributeaccess~.py
- about~deletingobjects~.py
- about~proxyobjectproject~.py
- about~proxyobjectproject~.py
- about~extracredit~.py
- about~regex~.py
扩展阅读
参考书目
学习了两个教程之后对Python语言已经有大致的了解,接下来如果需要深入学习,建议找一些严肃的书籍进行系统性的学习。
- python books
- 学习Python资源
- Best Python Resources Full Stack Python 本身也是很好的学习资源
第5周 编程风格与命令行开发
本周目标
了解Python编程风格及命令行开发工具.
Python code style 业界现在有两个标准,PEP8 以及 Google Python Style Guide 项目组采用PEP8标准,对于Google Style可以稍作了解
除了日常在IDE里进行Python开发,开发人员也应该掌握一些在命令行环境下进行编程和debug的技能
阅读材料
ipython
-
作为一个交互式shell, 用来代替默认的python命令行编程环境
1
2# 使用以下命令安装python2.7版本的ipython
pip install 'ipython<=6.0.0'
pdb
Python debuger, 交互式debug环境。类似于GDB
vim
命令行环境下的编辑器
- 交互式的VIM简短教程 十分炫酷的简短教程,掌握日常用到的最基本操作
编程练习
本周没有具体的编程练习,请花一点时间熟悉一下pip/virtualenv/ipython/pdb/vim工具。
编辑器/IDE是非常重要的工具,在工作过程中几乎所有的开发时间都花这上面,所以不 论你喜欢vim/emacs/vs code/atom/sublime text,你应该熟悉你的编程器/IDE。花些时间去了解 你喜欢的编程器/IDE
适当设置好开发环境对于提高开发效率也相当重要,有兴趣可以了解一下扩展阅读里列出的工具
扩展阅读
windows开发环境
个人推荐 Cygwin + ConEmu + zsh + oh-my-shell + CoreUtils
- Cygwin
- ConEmu
- 终极Shell 在Cygwin环境中也可以使用zsh + oh-my-zsh
- CoreUtils for Windows 常用的liunx命令windows移植
- 配置豪华的 Windows 开发环境
第6周 标准库及其它
本周目标
大概了解下Python标准库, 一些第三库/框架
阅读材料
标准库
- Python标准库——走马观花
- Python标准库01 正则表达式 (re包)
- Python标准库03 路径与文件 (os.path包, glob包)
- Python标准库04 文件管理 (部分os包,shutil包)
- Python标准库06 子进程 (subprocess包)
- Python标准库08 多线程与同步 (threading包)
常用库
-
Oslo
Oslo 是由openstack项目衍生出来的一系列python库,为openstack众多项目提供统一的公共功能。
To produce a set of python libraries containing code shared by OpenStack projects. The APIs provided by these libraries should be high quality, stable, consistent, documented and generally applicable
阅读使用和配置文档,大概了解这些包是用做什么的即可。
- oslo.cache
- oslo.concurrency
- oslo.config
- oslo.log
- oslo.policy
- pbr
-
SQLAlchemy
SQLAlchemy 是一个连接数据库的ORM框架 大概了解 SQLAlchemy 的简单使用方式,不要求深入了解
第7周 开源工具
本周目标
了解一些开源工具及项目开发协作相关工具
由于列出的工具较多,不要求深入了解
阅读材料
Markdown
Markdown语法 平时写文档时可以使用Markdown语法
示例网站 https://maxiang.io/ 可以看到左边为文本内容,右边为渲染后的效果。使用markdown语法,书写文档时不需 要关心排版效果,可以专注于内容本身。
Git && Gerrit
项目组使用Git进行代码版本管理,使用Git是一项必备技能。如果以前没有使用Git的 经验,请务必花一些时间学习。
Jenkins && CI
tox
运维利器 Ansible
自动化运维工具,可以稍作了解,日常工作中可能会用到ansible工具来批量运行脚本
- Ansible 简介 阅读简介至ad-hoc部分即可
- Ansible中文权威指南 如果有兴趣深入了解
第8周 实战
本周目标
本周为编程练习,创建一个Python项目,并编程完成要求
这个项目是完成一个命令行工具,可以通过命令行调用来完成数据库表的CUDR操作
编程练习
申请虚拟机作为开发机,要求CentOS7.2系统
配置pip文件
安装并配置PostgreSQL数据库
tips: 可以使用 NaviCat pgAdmin 等数据库管理工具
配置数据库密码为 test123456
创建database, 名称: cudr
在 cudr 新建表,表名example
创建 sql 如下
1 | DROP TABLE IF EXISTS "public"."example"; |
创建一个Python项目
项目名称 cudr
项目结构请阅读结构化你的工程 中仓库的结构一节,关于 Django Applications及之后的章节可跳过
在 requirements.txt 文件中指定项目依赖库
1 | sqlalchemy |
使用pip安装依赖
1 | pip install -r requirements.txt |
编程
在 cudr/core.py 中完成具体的代码工作
具体代码实现以及命令行使用参数的设计可以自由发挥
最终效果要求可以完成类似以下功能(不要求和下面示例代码中一样)
- 创建
- 读取
- 修改
- 删除
1 | # 创建一个数据库记录 |