第1章 初识Python

如果我告诉你,有一种计算机语言比其他计算机语言更好学、更易上手,且只需使用少量代码就能完成大量的工作,你会怎么想?

在很多人看来,这种语言就是Python。它是从ABC语言(意思是就像ABC一样简单)衍生而来的,最近20年来在世界各地斩获了大量的拥趸。很多程序员都加入了Python社区,因为在这个社区,只需安装Python,就可使用100 000多个免费包。

快来加入Python潮流吧。在本书中,我会引导你快速学会Python,即便你编程经验有限;我还将引领你避开陷阱——Python的行事方式如此不同,即便是经验丰富的程序员也会马失前蹄。本书适合编程新手阅读,也可供编程老手参考,因为其中讨论了幕后的情况。

1.1 Python简史

Python是荷兰程序员Guido van Rossum于1991年推出的,从很大程度上说,它是从ABC语言(请注意,不是C语言)衍生而来的。

Python至今还保留着ABC的很多功能。Van Rossum在Python界被称为“仁慈的独裁者”,他还在这门语言中融入了Modula-3语言的元素。

Van Rossum给这门语言命名的灵感来自BBC的喜剧《巨蟒剧团之飞翔的马戏团》,因此这门语言与蟒蛇没有直接的联系,虽然巨蟒剧团的成员John Cleese最初这样给剧团命名隐含着“阴险、虚伪”的意思。Python就这样诞生了,它与爬行动物还是有一定的联系的。

图像说明文字

从此以后,Python出现了多个版本,每个版本都添加了重要的功能,而最新的版本为Python 3.0。本书是针对Python 3.0编写的,但也指出了如何修改示例,以支持Python 2.0。

1.2 Python有何不同

对于Python,首先要知道的是它是免费的。

很多Python扩展都是免费的,可随Python一起安装。这些模块提供了数学、日期/时间、分数、随机数生成以及跨平台用户界面创建功能。与Python一样,它们都是免费的。

Python内置的数字功能令人叹为观止,它支持复数、浮点数、分数(模块Fractions)和“无穷大整数”。

Python吸引了大批的拥趸。有很多开发人员向Python程序员同仁提供库,这些库被称为包,大多是免费的。要获取这些包,可在浏览器中搜索Python Package Index,并访问找到的网站。本书编写期间,这个网站提供的包已超过107 000个。

乍一看,Python程序与使用其他语言编写的代码没什么不同,但仔细观察后,你会发现它们大不相同。

 不同于其他大多数语言,Python不提供代码块起始和结束语法,代码之间的各种关系都是使用缩进表示的!在C语言程序员看来,这好像很危险,但能确保代码外观的一致性,让初学者更容易理解。

 Python没有变量声明的概念:变量是通过给它们赋值来创建的。这极大地简化了Python的语法,但也制造出了隐藏极深的陷阱。本书将引领你避开这些陷阱。

 Python大量地使用了迭代的概念。所谓迭代,就是遍历序列。这个概念深植于列表、字典和集合等高级结构中。如果能够充分利用这些高级结构,你就能螺蛳壳里做道场。

考虑到Python的功能,它常被视为一种“原型设计”或“应用程序快速开发”语言。你可先使用Python快速编写出程序,在需要提升运行效率时,再使用C和C++进行改写。

1.3 本书的特色

我深信通过示例进行学习绝不逊于通过理论进行学习。本书将通过如下方式介绍Python基本知识以及一些中高级功能。

 通过语法图和短小精悍的示例介绍Python功能。

 通过较大的示例演示功能的用法。

 每个较大的示例都包含“工作原理”部分,对示例代码逐行进行解码。

 通过一系列练习检查你举一反三的能力。

Python提供了一个交互式开发环境——IDLE,建议你使用它来完成每个短小精悍的示例。

本书在书页边的空白内使用了大量的图标,旨在提供阅读线索。

图像说明文字 这些部分描述了一些基本的Python语法规则。需要你通过键盘原样输入的内容(如关键字和标点)用粗体表示;需要你提供具体内容的占位符,用斜体表示。例如,介绍global语句的语法时,关键字global用粗体表示,而需要你提供的变量名用斜体表示:

图像说明文字

global variable_name

图像说明文字 这个图标表示伪代码块,它们使用自然语言而不是Python系统地描述了程序的每一步。然而,鉴于Python语句与自然语言并不总是相差甚远,所以并非在任何情况下都需要使用伪代码。话虽如此,在有些情况下,伪代码对概述程序设计依然大有裨益。

图像说明文字 这些部分对较大示例的每一行(至少是所有不那么显而易见的代码行)进行解码。

图像说明文字 这些部分包含与之前的示例相关的练习。你至少应该尝试完成其中的一些,这样学习Python的速度将快得多。

图像说明文字 这些部分演示如何对示例进行修改或重大改进。并非每个示例都包含这部分。有些示例之所以包含这部分,是因为它们完成任务的方式平淡无奇,而优化后的方法演示了经验丰富的Python程序员会如何做。

1.4 安装Python

无论你使用的是Windows、Macintosh还是Python支持的其他众多操作系统,安装Python的步骤都差不多。基本步骤如下。

(1) 前往Python官网。

(2) 打开Downloads菜单。

(3) 如果出现了Downloads for Windows页面,单击按钮Python 3.6.1。如果你使用的不是Windows操作系统,就需要在菜单Downloads中选择相应的操作系统。

(4) 单击Save File按钮。

(5) 找到刚才保存的文件:无论你使用的是哪种操作系统,通常都有一个放置下载内容的目录。这个文件包含Python安装程序,双击它并按指示操作。

如果一切顺利,将在你的计算机上安装Python以及包括tkinter(用于开发GUI)在内的所有基本模块。现在你面临选择:为开始使用Python,你可使用“基本交互模式”(这也可行,但没什么特别的),也可使用交互式开发环境——IDLE。

强烈建议你使用后者。基本交互模式能做的IDLE都能做,而且还能做很多其他的事情。下一节将介绍一些使用IDLE的方式,它们在后面将为你节省大量时间。

基本交互模式像下面这样,它只提供了基本编辑功能,根本不支持从文本文件中加载程序。

图像说明文字

IDLE像下面这样。注意,它提供了各种菜单;相比于使用基本交互模式,在IDLE中可做的事情要多得多,其中包括从文本文件中加载程序以及对其进行调试。

图像说明文字

如果你使用的是Windows,在“开始”菜单中就能够找到基本交互模式应用程序,但这不是你想要的。你应该花点时间选择“程序”>Python>IDLE,这样做是完全值得的。

在Mac系统中(假设你安装了Python,包括IDLE),要启动IDLE,可能需要这样做:打开Finder,然后依次选择“应用程序”、Python和IDLE。你下载的Python可能包含基本模式,也可能不包含。

1.5 开始通过IDLE使用Python

启动交互式开发环境IDLE。建议将它作为你的大本营,因为在学习Python期间,你的大部分时间都将在这里度过。你应将这个图标放到桌面,这样可随时轻松地启动IDLE。

IDLE启动后,你就会看到一个类似于下面这样的提示符:

>>>

在这个提示符下,你可以输入Python语句或表达式,还可使用命令help并指定类型来获取帮助,如下所示:

>>>help(str)

对于用户输入(需要你通过键盘输入的字符),我将用粗体表示;对于Python的输出,则使用常规字体表示。全书都将遵循这样的约定。

1.6 在IDLE中修正错误

IDLE的优点之一是,让你能够轻松地修正错误。假设你输入了如下代码:

>>>x = z

本书后面将指出,这是一条赋值语句,如果之前没有给变量z赋值,它将引发错误。IDLE打印的消息类似于下面这样:

Traceback (most recent call last):
  File "<pyshell#205>", line 1, in <module>
    x = z
NameError: name 'z' is not defined

就这里而言,重新输入语句很容易,但如果导致错误的是一个长得多的代码块,你可能就不想重新输入整个代码块了。下面是一个这样的示例:

def print_nums(n):
    i = 1
    while i <= n:
        print(i, end='\t')
        i +++= 1

这个代码块存在的问题是,其中的最后一行为i +++= i而不是i += i(只能有一个加号)。

你想修正这个错误,但不想重新输入所有的语句。所幸在IDLE中修正错误易如反掌,你只需这样做:

(1) 将光标放在代码块的任何一行中(如果代码块只包含一行代码,务必将光标放在行尾);

(2) 按回车键。

整个代码块都奇迹般地再次出现了,且光标位于代码块的末尾。你可随便进行修复:使用箭头键移到要修复的地方,再进行修复。最后,要重新提交代码块,将光标放到最后一行的末尾并按回车键两次。

务必记住这种技巧,这将为你节省大量的时间。

1.7 续行

考虑到Python解读分行的方式,你不能像C语言中那样让代码横跨多行。如果你需要输入特别长的代码行,该怎么办呢?

一般而言,Python语句通常到行尾结束,因为它不像C语言那样有语句结束语法。然而,如果当前行没有与左括号、左大括号或左中括号配套的右括号、右大括号或右中括号,代码行将自动延伸到下一行。下面是一个这样的示例:

total_amount = (this_amount + that_amount 
   + a_big_number + count + even_more amounts )

第1行的左括号(()让你能够将语句延伸到后续行,直到找到与之配套的右括号。在这种情况下,缩进无关紧要,其唯一的用途是提高可读性(Python通常要求缩进必须一致)。

在有些情况下,你可能无法采用这种办法。如果你必须延伸到下一行,又没有别的办法,可使用反斜杠。

>>>my_str = 'I am typing a very long \
line of code.'

那么问题来了:在用引号括起的字符串中,如何表示反斜杠呢?答案是必须使用两个反斜杠(\)来表示。

>>>my_str = 'I am typing a backslash: \\ \
in a long line of code.'

第7章将更详细地介绍如何创建用引号括起的字符串。

前面介绍了一些Python的生存技能。如果你准备好了,接下来该去探索Python了。

1.8 其他帮助信息:在线资源

在本章前面,我强烈建议你下载Python 3.0或更新版本。如果你使用的是较旧的Python 2.0,本书的大部分代码依然可行,但可能需要做些调整。虽然我就如何针对Python 2.0进行调整做了说明,但如果你想获得其他帮助信息,可访问如下网站:

 wiki.python.org/moin/Python2orPython3

wiki.python.org/moin/PortingToPy3k/BilingualQuickRef

虽然本书的很多示例都相对较小,自己输入也很容易,但后面的一些章节包含较长的代码清单,在这种情况下如果能够下载它们将大有帮助。你可从图灵社区本书主页 (http://www.ituring.com.cn/book/2556)随书下载处下载这些代码清单。

目录

  • 前言
  • 第1章 初识Python
  • 第2章 Python探索之旅:数字
  • 第3章 第一个程序
  • 第4章 决策和循环
  • 第5章 Python列表
  • 第6章 列表推导和枚举
  • 第7章 Python字符串
  • 第8章 操作字符
  • 第9章 高级函数技术
  • 第10章 局部变量和全局变量
  • 第11章 操作文件 
  • 第12章 字典和集合
  • 第13章 矩阵:二维列表
  • 第14章 决胜井字棋
  • 第15章 类和对象(一)
  • 第16章 类和对象(二)
  • 第17章 生命游戏 
  • 第18章 Python高级技术