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

栏目: Python · 发布时间: 7年前

内容简介:0612 - 我入门 Python 后总结的基础教程

0612 - 我入门  <a href='https://www.codercto.com/topics/20097.html'>Python</a>  后总结的基础教程

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

0.0) 我为什么选择 Python

我在后端的积累并不多,之前使用 Swift + Vapor 开发 iPic 的后端服务,遇到很多问题:

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

适合后端开发的语言还是挺多的,比如 JavaPHP 、Python、 RubyGo 、Javascript、等等。我其实并没有严格比较,最后选择了 Python,主要原因其实是和 Swift 相对的:

  • Python 成熟 ,无论在 Windows/Linux/macOS 都很稳定。
  • Python 轮子多 ,几乎所有能标准化的操作都能找到库,然后你可以专注于自己的业务。

还有个原因,之前我接触过的开发语言(VB/C++/Java/C#/Swift)都是编译型的,这次想学个 解释型 的玩玩。

0.1) 首先,知道要学什么

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

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

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

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

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

清单上的知识点,我并不打算展开讲,因为:

  • 这太花( )时( )间( )了
  • 通常,官方文档已经足够好,我没必要复制粘贴

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

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

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

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

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

1) Python 语法及基础

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

1.0) Python 2 or 3?

Python 的 2、3 之争,在网上可以找到很多。虽然我一向主张学新不学旧(比如我甚至尝试用 Swift 开发后端,no zuo no die…),但在后端方面,由于吃了 Swift 的亏, 我建议先学习成熟的 Python 2 。真到了不得不用 3 的时,学。据说差别并不大(我保证,绝对没有 Swift 2 和 3 的差别大)

1.1) 入门教程

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

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

0612 - 我入门 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 统一,用起来很割裂

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

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 ,其利用 Shellshims 机制, 当你 cd 到项目目录时,自动切换 Python 版本 (对比 virtualenv,其需要手动执行 source 命令,麻烦)。

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

0612 - 我入门 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/http2、负载均衡等方面,更擅长。

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

4.3) MySQL

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

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

4.4) Supervisor

服务,要的就是稳定。

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

于是,使用 Supervisor ,监控程序运行,挂了就立即重新运行。

5) 尾巴

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

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

Python 我只是入门,要学的东西还很多,以后还会有小结、分享。

未完待续…


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Mobilizing Web Sites

Mobilizing Web Sites

Layon, Kristofer / 2011-12 / 266.00元

Everyone has been talking about the mobile web in recent years, and more of us are browsing the web on smartphones and similar devices than ever before. But most of what we are viewing has not yet bee......一起来看看 《Mobilizing Web Sites》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具