我入门 Python 后总结的基础教程

0) 先唠叨几句

学习 Python 有几周了,也写了 2 个小项目来解决本身的实际需求。简单记录一下,供本身备忘,也供后来者参考。html

0.0) 我为何选择 Python

我以前使用 Swift + Vapor 开发了 iPic (图床工具) 的后端服务,遇到不少问题:python

  • 主要仍是 Swift 在 Ubuntu 下并不成熟,甚至不少关键性、基础性的库,都是 TBD;
  • 以及,基于 Swift + Ubuntu 的库并很少,开发起来很吃力。

接下来要开发 Klib (Kindle、iBooks 标注管理) 的标注分享功能,须要后端支持,因而打算好好学一学后端开发。mysql

适合后端开发的语言仍是挺多的,好比 Java、PHP、Python、Ruby、Go、Javascript、等等。我其实并无严格比较,最后选择了 Python,主要缘由实际上是和 Swift 相对的:nginx

  • Python 成熟,不管在 Windows/Linux/macOS 都很稳定。
  • Python 轮子多,几乎全部能标准化的操做都能找到库,而后你能够专一于本身的业务。

还有个缘由,以前我接触过的开发语言(VB/C++/Java/C#/Swift)都是编译型的,此次想学个 解释型 的玩玩。git

0.1) 首先,知道要学什么

先形而上地聊聊这个话题。github

至少从个人经验来看,在学习同样新东西时,我很但愿能被告知要学什么,相似于一个大纲、知识点清单。这样,我就能够对照着清单同样样学习,方向感清晰、还不怕走弯路。sql

而事实上,不多有这样的「清单」,最接近的多是书的目录。惋惜,好书实在太少了。尤为技术更新快,书中的知识极可能是陈旧的。shell

出于这个理解,本文我只会 罗列我学习 Python 时所遇到的知识点,尽可能组织成系统的清单数据库

0.2) 然而,我并不会教你怎么学

清单上的知识点,我并不打算展开讲,由于:django

  • 这太花()时()间()了
  • 一般,官方文档已经足够好,我不必复制粘贴

因此,对于某一个具体的点,还得你本身去学习。至于怎么学?我建议,在项目开发实际用到某个点时,再参考官网系统性的学习

若是你实在急的必须在被炒鱿鱼以前解决某个问题(一般并不存在),你能够上网搜索,一般在技术博客、StackOverflow 这样的网站上能找到答案。

不过,这是种投机行为、可能会有 陷阱

  • 若是你找对了方案,可能很快就解决问题。
  • 可若是你找了过时的、错误的、不适合你的环境的方案,你可能会掉入解决 A 问题时遇到 B 问题、解决 B 问题时又遇到 C 问题这样的陷阱,所花的时间,会当初系统性地学习,更多。

1) Python 语法及基础

好,唠叨了半天,终于来干的了。

1.0) Python 2 or 3?

Python 的 二、3 之争,在网上能够找到不少。虽然我一贯主张学新不学旧(好比我甚至尝试用 Swift 开发后端,no zuo no die…),但在后端方面,因为吃了 Swift 的亏,我本身选择先学习 Python 2。真到了不起不用 3 的时,学。听说差异并不大(我保证,绝对没有 Swift 2 和 3 的差异大)

1.1) 入门教程

虽然说我一贯建议以官网为基础学习,但 Python 的官网的文档实在是太长了。没办法,为了全面性,各类犄角旮旯、你一生都用不到点的,官网也要说起。

这里介绍 2 个 Python 入门教程:

2) 尽早开发 Python 项目

我建议,一旦有了语法基础,尽早 开发实际的、能解决本身问题的项目(或表述为工程、产品、工具、轮子)。

注意,必定要是「能解决本身问题的项目」。相信我,若是只是作一个你本身根本用着的博客系统、爬虫之类的,学习过程当中的困难必定会让你半途而废的。

2.0) 项目的文件夹结构

若是你真的想写个好项目,项目的文件夹结果必定要拿得出手,好比要区分代码、配置、数据、文档、测试等文件。尤为对于在不一样服务器上部署、须要区分开发与生产环境的项目,更重要。

注意,文件夹结构并无惟一解;而且,和你使用的网络框架(后面会介绍)相关。在实践中逐渐优化,越早造成一套本身熟悉的项目结构,收益越大。

我在 GitHub 上建立了一个 Python 项目文件夹结构示例,供参考。

参考:

2.1) 单元测试

单元测试很重要、很重要、很重要

尤为对于后端程序,几乎没有用户交互,很是适合进行单元测试。也许,一些已经超出了单元测试的范畴,称之为功能测试、压力测试、等等更合适。Anyway,叫测试就对了。

我在开发过程当中有写单元测试的习惯,甚至有时会先写单元测试、再写功能代码(恩,这就是测试驱动开发)。

在多个测试框架中,我目前选择 pytest:一直在更新、对 Python 3 支持好、自动发现测试用例。

2.2) IDE

我一位大学同窗,用 Windows 记事本开发了一个局域网内 IM 工具,可那是为了学习。人生苦短,仍是用 IDE 开发吧。

选什么呢?其实我并无纠结,由于以前在 Windows 上使用 Visual Studio、且一直听闻 Visual Studio Code 不错,就直接上了 VS Code

不过,VS Code 自己只提供一个框架,要打造适合本身的 IDE,还得有一系列的配置,好比主题、字体、快捷键、插件、等等。

就 Python 开发,目前还有几点不顺手(若是你知道怎么作,麻烦告诉我):

  • 出错时,不能点击错误日志跳转至对应的代码
  • 单元测试有时会卡死,重启 VS Code 后正常
  • 调试工具跟 Xcode 等工具备差距
  • 快捷键没办法和 Xcode 统一,用起来很割裂

3) 善用 Python 库

Python 的优点之一,就是轮子多,也就是库(模块)丰富。碰到一个问题,你不愁找不到库,而是不知道该选哪一个,甜蜜的烦恼。

号外:我为 Python 造的第一个轮子:AES256CBC

3.1) 标准库

任何语言都会把经常使用的库,归入本身的标准库中。其实,不少时候咱们说一门语言,都是在学其标准库。

对于标准库的学习,却是建议参考 官方文档

3.2) 管理 Python 库

库多了,管理就成了问题。这个没什么好说的,直接使用 pip

小技巧:

  • 对于项目的依赖库,可使用 requirements.txt 集中管理。
pip freeze > requirements.txt
pip install -r requirements.txt复制代码
  • 能够将 Python 的安装源改成国内豆瓣、阿里等镜像源,速度快。

3.3) Python 运行环境

库+库,就是 Python 运行环境。尤为,当你须要在服务器上部署 Python 项目时,保证服务器和开发环境有一致的 Python 运行环境,很重要。

推荐使用 pyenv,其利用 Shell 的 shims 机制,当你 cd 到项目目录时,自动切换 Python 版本(对比 virtualenv,其须要手动执行 source 命令,麻烦)。

小建议:要在本身的电脑上特别创建一个「Python 脏环境」,用于平时写临时代码、测试新模块时使用,确保不会破坏电脑上的 Python 环境。

4) 使用 Python 开发网络服务

前面听说,我学 Python 主要是为了后端。我目前使用的是 Flask + Gunicorn + Nginx + MySQL + Supervisor 组合。

4.0) Flask

Python 的 Web 框架很多,不过听说主要仍是 DjangoFlask。听说:

  • Django 的特色的大而全、开箱即用。
  • Flask 的特色的小巧灵活、定制性高。

只要不是太不成熟、坑太多,我一般会选择简单的,因而,选 Flask.

Flask 是个大话题,根本不适合在这里介绍,直接看 Flask Web Development 这本书吧,建议读原文。

4.1) Gunicorn

Flask 自带的 Web 服务器只是能让代码跑起来,而真正用于生产,则须要考虑并发、缓存等问题。

主要的选择是 uWSGIGunicorn,和 Flask 与 Django 的对比很类似:

  • uWSGI 的特色的成熟、用的人多、高性能、强大(复杂)
  • Gunicorn 则更简单、易用

因而,选 Gnuicorn.

Gnuicorn 的配置简单,直接看官方文档便可。

4.2) Nginx

有了 Flask + Gunicorn,为何还要 Nignx?职责不一样,Nginx 在处理静态资源、https/http二、负载均衡等方面,更擅长。

Nginx 我就不介绍了吧?主要仍是和 Gnuicorn 的配合。

4.3) MySQL

本地测试,我直接使用 SQLite,但要用于服务器,仍是 MySQL 吧。

主要此次开发 Klib 后端服务,业务上的数据比较规整,适合关系数据库;之后有机会再试试 NoSQL 吧。

4.4) Supervisor

服务,要的就是稳定。

啥叫稳定?就是程序挂了能满血复活、从新运行。

因而,使用 Supervisor,监控程序运行,挂了就当即从新运行。

5) 尾巴

这么长、这么枯燥的文章你都能看完?牛!粉个人公众号吧,之后每周二都会有一篇技术长文。

Python 我只是入门,要学的东西还不少,之后还会有小结、分享。

未完待续…

相关文章
相关标签/搜索