查看全部 Python3 基础教程
发展历程
自从 20 世纪 90 年代初 Python 语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理和 Web 编程。
Python 的创始人为荷兰人吉多·范罗苏姆 (Guido van Rossum)。1989年圣诞节期间,在阿姆斯特丹,Guido 为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为 ABC 语言的一种继承。之所以选中Python (大蟒蛇的意思) 作为该编程语言的名字,是取自英国 20 世纪 70 年代首播的电视喜剧《蒙提·派森的飞行马戏团》(Monty Python’s Flying Circus)。
ABC 是由 Guido 参加设计的一种教学语言。就 Guido 本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是 ABC 语言并没有成功,究其原因,Guido 认为是其非开放造成的。Guido 决心在 Python 中避免这一错误。同时,他还想实现在 ABC 中闪现过但未曾实现的东西。
就这样,Python 在 Guido 手中诞生了。可以说,Python 是从 ABC 发展起来,主要受到了 Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了 Unix shell 和 C 的习惯。
Python 已经成为最受欢迎的程序设计语言之一,自从 2004 年以后,其使用率呈线性增长。Python 2 于 2000 年 10 月 16 日发布,稳定版本是 Python 2.7。Python 3 于 2008 年 12 月 3 日发布,不完全兼容 Python 2。2011 年 1 月,它被 TIOBE 编程语言排行榜评为 2010 年度语言。
语言特征
Python 哲学
在解释器内输入 import this
会输出 Python 语言的设计哲学。
>>> import this
The 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 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。 -
免费、开源
Python 是 FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS 是基于一个团体分享知识的概念。 -
高层语言
用 Python 语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。 -
可移植性
Python 是开源的,已经被移植到许多平台上(解释器使得易于移植)。这些平台包括 Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian 以及 Google 基于 linux 开发的 android 平台。 -
解释性
Python是一门解释型语言,不需要编译和链接的时间。Python 解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。解释器可以交互式使用,这样就可以很方便的测试语言中的各种功能,以便于编写发布用的程序,或者进行自下而上的开发。还可以当它是一个随手可用的计算器。
-
面向对象
Python 既支持面向过程的编程也支持面向对象的编程。
Python 是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python 支持重载运算符和动态类型。相对于 Lisp 这种传统的函数式编程语言,Python 对函数式设计只提供了有限的支持。有两个标准库(functools
,itertools
)提供了 Haskell 和 Standard ML 中久经考验的函数式程序设计工具。 -
可扩展性、可扩充性
如果需要一段关键代码运行得更快或者希望某些算法不公开,可以部分程序用 C 或 C++ 编写,然后在 Python 程序中使用它们。
Python 解释器易于扩展,可以使用 C 或 C++(或者其他可以通过 C 调用的语言)扩展新的功能和数据类型。Python 也可用于可定制化软件中的扩展程序语言。Python 丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。Python 编译器本身可以被集成到其它需要脚本语言的程序内。因此,很多人把 Python 作为一种“胶水语言”(glue language)使用。使用 Python 将其他语言编写的程序进行集成和封装。在 Google 内部的很多项目,例如 Google Engine 使用 C++ 编写性能要求极高的部分,然后用 Python 或 Java/Go 调用相应的模块。
-
丰富的库
Python 标准库很庞大,可以帮助处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV 文件、密码系统、GUI、Tk 和其他与系统有关的操作。除了标准库以外,还有许多其他高质量的库,如 wxPython、Twisted 和 Python 图像库等。 -
规范的代码
Python 采用强制缩进的方式使得代码具有较好可读性。且这使得不好的编程习惯(例如if
语句的下一行不向右缩进)都不能通过编译。Python 中一个模块的界限,完全是由每行的首字符在这一行的位置来决定,而 C 语言是用一对花括号{}
来明确的定出模块的边界,与字符的位置毫无关系。 -
高级动态编程
虽然 Python 可能被粗略地分类为“脚本语言”,但实际上一些大规模软件开发计划例如 Zope、Mnet 及 BitTorrent,Google 也广泛地使用它。因为“脚本语言”泛指仅作简单程序设计任务的语言,如 shellscript、VBScript 等只能处理简单任务,并不能与 Python 相提并论,Python 的支持者更喜欢称它为一种高级动态编程语言。 -
科学计算 VS MATLAB
除了一些专业性很强的工具箱无法被替代之外,MATLAB 的大部分常用功能都可以在 Python 中找到相应的扩展库。和 MATLAB 相比,用 Python 做科学计算有如下优点:
1、首先,MATLAB 是一款商用软件,并且价格不菲。而Python完全免费,众多开源的科学计算库都提供了 Python 的调用接口。用户可以在任何计算机上免费安装 Python 及其绝大多数扩展库。
2、其次,Python 是一门更易学、更严谨的程序设计语言。它能让用户编写出更易读、易维护的代码。
3、最后,MATLAB 主要专注于工程和科学计算。然而即使在计算领域,也经常会遇到文件管理、界面设计、网络通信等各种需求。而 Python 有着丰富的扩展库,可以轻易完成各种高级任务。
缺点
-
单行语句和命令行输出问题:很多时候不能将程序连写成一行,如
import sys;for i in sys.path:print(i)
。而 perl 和 awk 就无此限制,可以较为方便的在 shell 下完成简单程序,不需要如 Python 一样,必须将程序写入一个.py
文件。 -
用缩进来区分语句关系的方式给部分初学者带来了困惑。即便是很有经验的 Python 程序员,也可能陷入陷阱当中。
-
运行速度慢:这里是指与 C 和 C++ 相比。在某些对运行速度要求很高的情况,Python 设计师倾向于使用 JIT 技术(PyPy),或者用使用 C/C++ 语言改写这部分程序。
Python VS C & Shell
相对于 Shell,它提供的针对大型程序的支持和结构要多的多。另一方面,它提供了比 C 更多的错误检查,并且,做为一门高级语言,它拥有内置的高级数据类型,例如可变数组和字典,如果通过 C 来实现的话,这些工作可能让你大干上几天的时间。因为拥有更多的通用数据类型,Python 适合比 Awk 甚至 Perl 更广泛的问题领域,在其它的很多领域,Python 至少比别的语言要易用得多。
Python 可以写出很紧凑和可读性很强的程序。用 Python 写的程序通常比同样的 C 或 C++ 程序要短得多,这是因为以下几个原因:
- 高级数据结构使你可以在一个单独的语句中表达出很复杂的操作;
- 语句的组织依赖于缩进而不是 begin/end 块;
- 不需要变量或参数声明。
运行机制
Python 在执行时,会先将 .py
文件中的源代码编译成 byte code(字节码),然后再由 Python Virtual Machine(Python 虚拟机)来执行这些编译好的 byte code。这种机制跟 Java 和 .NET 是一致的。然而 Python Virtual Machine 与 Java 或 .NET 的 Virtual Machine 相比抽象层次更高,即距离真实机器更远。基于 C 的 Python 编译出的字节码文件,通常是 .pyc
格式。
提示符与注释符
解释器中区分输入和输出的方法是看是否有提示符 >>>
和 ...
。
没有以提示符开始的行,是解释器输出的信息。注意辅助提示符用于多行命令的结束,表示需要输入一个空行。
Python 中的注释以符号 #
起始,一直到当前行的结尾。注释可能出现在一行的开始,也可能跟在空格或程序代码之后。
字符串中的
#
号只代表其本身。
# this is the first comment
spam = 1 # and this is the second comment
# ... and now a third!
text = "# This is not a comment because it's inside quotes."