简介

阅读 364

Python Logo

自 1991 年,龟叔(Guido van Rossum 中文翻译为:吉多·范罗苏姆)创造 Python 编程语言开始,Python 就因为其独特的设计哲学吸引了大批的开发者。Python 强调代码的可读性和简洁的语法,它拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且拥有一个庞大的标准库和丰富的第三方开源库。让开发者从复杂的语言特性中解放出来,用更少的代码表达想法。学习 Python 入门容易,开发大型项目也很容易。现在, Python 主要用于 Web 开发、数据分析、机器学习等领域。尤其是机器学习,Python 几乎是一统天下。

Python 官方基础信息

Python 现在是由 Python 软件基金会管理,官网是 https://www.python.org,几乎所有 Python 重大事件都会在官网公布。官网发布有中文的 Python 文档,每个开发者都应该认真阅读 Python 文档,尤其是 Python 标准库 ,标准库包含基础数据类型、文件、日志、日期、邮件、多线程、多进程、异步、网络等工具,甚至还自带一个小型的数据库。如果不熟悉标准库,会重复造轮子,开发效率和运行效率都会大打折扣。

Python 的新功能开发,会先提出 PEP(Python Enhancement Proposals, Python 增强提案),经过讨论之后安排开发,然后加入测试版,在确认功能完成之后,会在新版本中加入此功能。Python 初学者应该了解的 PEP 有 PEP 8(Style Guide for Python Code,Python 编码风格指导)、PEP 20( The Zen of Python,Python 之禅,其他的可以根据兴趣在适当的时候了解一下,如学习 http 编程时候可以看一看 pep 3333(Python Web Server Gateway Interface,Python Web服务器网关接口)。

Pythonic

Pythonic 简单直观的理解就是“用 Python 的方式,符合 Python 宗旨的代码”。比如使用迭代器、with 语句、魔法函数等其他编程语言中不太常用的功能,在 Python 中能够得到巧妙的应用。

Python 之禅很好的说明了 Python 的使用哲学。

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 特点

Python 最大的特点就是其动态类型和自动垃圾回收。动态类型,简单的理解就是定一个变量 a,a 既可以设置为数字类型的值,也可以设置为字符串类型的值,具体 a 的类型,要在使用的时候才能明确。自动垃圾回收是指,对于定义的变量 a,其值是一个字符串类型 “hello”,现在 a 已经使用过了,a 的值所占用的内存会被自动释放掉。

这些特性为开发提供了很大的便利性,提高了开发效率,代价就是运行的效率。另外 Python 是一门解释型语言,代码执行的时候需要一步一步翻译成机器代码,综合因素使得Python 的运行效率要比C/C++ 慢一个量级。但是在 Python 主要应用场景,代码执行速度并不是影响程序性能的主要原因,比如影响 web 性能的主要因素是 网络和数据库;机器学习的主要时间都在 GPU 运算上。

Python 版本

严格意义上来说,平时使用的 Python 版本是 cPython,是用 C 语言开发的 Python 解释器,也是官方维护的 Python 版本。此外,还有 PyPy 。PyPy 是用 Python 语言开发的 Python 解释器,使用了 JIT 等特性,运行效率提高了 2 到 3 倍,但是由于 PyPy 开发进度落后于官方 cPython,大量的 Python 库底层使用 C 开发的,不兼容 PyPy,或者对性能要求不高等原因,所以 PyPy 使用的并不广泛。

特别说明一下官方 Python 版本。当前的 Python 版本是 3.9,本教程也是基于 Python 3.9,下一个版本应该是 3.10。之所以强调这个,是因为Python 曾经经历过 2.x 版本时代,Python2 和 Python3 是不兼容的。但是 Python2 已经过时,并且官方已经放弃支持了,所以,现在无论如何都不应该使用 Python2。不必担心 Python 4 会不会出现类似的问题,放弃 Python2 是因为 Python2 有一些基本问题,比如 编码格式、字符串、类型等问题,目前来看,Python3 没有类似的问题,完全没有必要放弃兼容。

本教程的结构

本教程循序渐进的从安装 Python 开始,介绍 Python 的数据类型、控制流、函数和类,然后介绍一下高级的概念,如异常、并发,最后介绍一些算法和科学计算、网络编程等应用。

由于标准库实在是太重要,如果单独一章介绍也许难以记住,所以在每一章的后面都加了一些标准库的介绍。这些内容一定要知道,即便是在用到的时候,查找官方文档都行。

下面,就开始正式的 Python 学习吧。