简明Python教程·第一步
上一篇专栏


第一步
接下来我们将看见如何在 Python 中运行一个传统的“Hello World”程序。本章将会教你如何编 写、保存与运行 Python 程序。
通过 Python 来运行的你的程序有两种方法——使用交互式解释器提示符或直接运行一个源代 码文件。我们将了解如何使用他们二者的功能。
使用解释器提示符
在你的操作系统中打开终端(Terminal)程序(正如我们先前在 安装 章节所讨论过的那样) 然后通过输入 python3 并按下 [enter] 键来打开 Python 提示符(Python Prompt)。
当你启动 Python 后,你会看见在你能开始输入内容的地方出现了 >>> 。这个被称作 Python 解释器提示符(Python Interpreter Prompt) 。
在 Python 解释器提示符,输入:
在输入完成后按下 [enter] 键。你将会看到屏幕上打印出 Hello World 字样。
下面是一个在 Mac OS X 电脑上你能够看见的结果的示例。有关 Python 软件的细节将会因为 你使用的电脑而有所不同,但是从提示符(如 >>> )开始部分应该是相同的,而不会受到操 作系统的影响。
你自然会注意到,Python 会立即给你输出了一行结果!你刚才所输入的便是一句独立的 Python 语句 。我们使用 print (不必太过惊讶)命令来打印你所提供的信息。在这里,我 们提供了文本 Hello World ,然后它便被迅速地打印到了屏幕上。
如何退出解释器提示符
如果你正在使用一款 GNU/Linux 或 OS X 上的 Shell 程序,你可以通过按下 [ctrl + d] 组 合键或是输入 exit() (注意:要记住要包含括号 () )并敲下 [enter] 来退出解释器提示符。
如果你使用的是 Windows 命令提示符,可以按下 [ctrl + z] 组合键并敲击 [enter] 键来 退出。
选择一款编辑器
当我们希望运行某些程序时,总不能每次都在解释器提示符中输入我们的程序。因此我们需 要将它们保存为文件,从而我们便可以多次地运行这些程序。
要想创建我们的 Python 源代码文件,我们需要一款能够让你输入并保存代码的编辑器软件。 一款优秀的面向程序员的编辑器能够帮助你的编写源代码文件工作变得轻松得多。故而选择 一款编辑器确实至关重要。你要像挑选你想要购买的汽车一样挑选你的编辑器。一款优秀的 编辑器能够帮助你更轻松地编写 Python 程序,使你的编程之旅更加舒适,并助你找到一条更 加安全且快速的道路到达你的目的地(实现你的目标)。
对编辑器的一项最基本要求为 语法高亮 ,这一功能能够通过标以不同颜色来帮助你区分 Python 程序中的不同部分,从而能够让你更好 看清 你的程序,并使它的运行模式更加形象 化。
如果你对应从哪开始还没有概念,我推荐你使用 PyCharm 教育版 软件,它在 Windows、 Mac OS X、GNU/Linux 上都可以运行。在下一节你能够了解到更多信息。
如果你正在使用 Windows 系统,不要用记事本——这是一个很糟糕的选择,因为它没有语法 加亮功能,同样重要的另一个原因是,它不支持文本缩进功能,这一功能我们之后将会了解 它究竟有多重要。而一款好的编辑器能够自动帮你完成这一工作。
如果你已是一名经验丰富的程序员,那你一定在用 Vim 或 Emacs 了。无需多言,它们都是最 强大的编辑器之一,用它们来编写你的 Python 程序自是受益颇多。我个人用它们来编写了我 大部分程序,同时也因此写了一本书《Entire Book on Vim》。
或许你有意去花费时间来学习 Vim 或 Emacs,那么我自是强烈推荐你学习它们二者中的一 款,它们将在长远意义上对你裨益颇深。当然,正如我先前所推荐的,初学者可以以 PyCharm 开始,从而在此刻专注于学习 Python 而不是编辑器。
再此重申,请选择一款合适的编辑器——它能够让编写 Python 程序变得更加有趣且容易。
PyCharm
PyCharm 教育版 是一款能够对你编写 Python 程序的工作有所帮助的免费编辑器。
当你打开 PyCharm 时,你会看见如下界面,点击 Create New Project :

选择 Pure Python :

将你的项目路径位置中的 untitled 更改为 helloworld ,你所看到的界面细节应该类似于下方这番:

点击 Create 按钮。
对侧边栏中的 helloworld 右击选中,并选择 New -> Python File :

你会被要求输入名字,现在输入 hello :

现在你便可以看见一个新的文件已为你开启:

删除那些已存在的内容,现在由你自己输入以下代码:
现在右击你所输入的内容(无需选中文本),然后点击 Run 'hello' 。

此刻你将会看到你的程序所输出的内容(它所打印出来的内容):

嚯!虽然只是刚开始的几个步骤,但从今以后,每当我们要求你创建一个新的文件时,记住 只需在 helloworld 上右击并选择 -> New -> Python File 并继续如上所述步骤一般输入内 容并运行即可。
你可以在 PyCharm Quickstart 页面找到有关 PyCharm 的更多信息。
Vim
1. 安装 Vim。
Mac OS X 应该通过 HomeBrew 来安装 macvim 包。
Windows 用户应该通过 Vim 官方网站 下载“自安装可执行文件”。
GNU/Linux 用户应该通过他们使用的发行版的软件仓库获取 Vim。例如 Debian 与 Ubuntu 用户可以安装 vim 包。
2. 安装 jedi-vim 插件为 Vim 增添自动完成功能。
3. 安装与之相应的 jedi Python 包: pip install -U jedi
Emacs
1. 安装 Emacs 24+。
Mac OS X 用户应该从 http://emacsformacosx.com 获取 Emacs。
Windows 用户应该从 http://ftp.gnu.org/gnu/emacs/windows/ 获取 Emacs。
GNU/Linux 用户应该从他们使用的发行版的软件仓库获取 Emacs。如 Debian 和 Ubuntu 用户可以安装 emacs24 包。
2. 安装 ELPY。
使用一份源代码文件
现在让我们回到编程中来。在你学习一门新的编程语言时有一项传统,你所编写并运行的第 一个程序应该是 “Hello World” 程序——它所做的全部工作便是宣言你所运行的“Hello World”这句话。正如西蒙·科泽斯(Simon Cozens,一译西蒙·寇森斯) 所说,这是“向编程 之神所称颂的传统咒语,愿他帮助并保佑你更好的学习这门语言”。
启动你所选择的编辑器,输入如下程序并将它保存为 hello.py 。
如果你正在使用 PyCharm,我们已经讨论过如何从源文件中运行它了。
对于其它编辑器,打开一个新文件名将其命名为 hello.py ,然后输入如下内容:
你应当将文件保存到哪里?保存到任何你知道其位置与路径的文件夹。如果你不了解这句话 是什么意思,那就创建一个新文件夹并用这一路径来保存并运行你所有的 Python 程序:
Mac OS X 上的 /tmp/py 。
GNU/Linux 上的 /tmp/py 。
Windows 上的 C:\\py 。
要想创建上述文件夹(在你正在使用的操作系统上),你可以在终端上使用 mkdir 命令,如 mkdir /tmp/py 。
重要提示:你需要经常确认并确保你为文件赋予了 .py 扩展名,例如 foo.py 。
要想运行你的 Python 程序:
1. 打开终端窗口(你可查阅先前的 安装章节来了解应该怎么做)。
2. 使用 cd 命令来改变目录到你保存文件的地方,例如 cd /tmp/py 。
3. 通过输入命令 python hello.py 来运行程序。程序的输出结果应如下方所示:

如果你得到了与上图类似的输出结果,那么恭喜你!——你已经成功运行了你的第一个 Python 程序。你亦已经成功穿过了学习编程的最困难的部分,也就是,开始编写你的第一个 程序!
如果你遭遇了什么错误,请确认是否已经正确地输入了上面所列出的内容,并尝试重新运行 程序。要注意 Python 是区分大小写的,如 print 和 Print 是不同的——注意前者的 p 是小写的,而后者的 P 是大写的。此外,你需要确保每一行的第一个字符前面都没有任何空格 或制表格——我们会在后面了解 为什么这件事如此重要。
它是如何工作的
一款 Python 程序是由 语句 所构成的。在我们的第一个程序中,我们只有一条语句。在这条 语句中,我们调用 print 语句 来搭配我们提供的文本“hello world”。
获取帮助
如果你需要获得 Python 中有关任何函数或语句的快速信息,你可以使用其内置的 help 功 能。这在使用解释器提示符时十分有用。例如,运行 help('len') 命令——这将显示出有关 len 函数的帮助,了解其是用来计算项目数量的。
小贴士:按下 q 键可以退出帮助。
类似地,你可以通过此方式获得几乎所有有关 Python 的信息。使用 help() 命令来了解有关 help 它本身的更多信息吧!
如果你需要获得有关 return 这类运算符的帮助,你需要做的就是将它们放在引号中,就像 help('return') 这般,这样 Python 就不会混淆我们正在试图做的事情。
总结
现在,你应该可以轻松地编写、保存并运行 Python 程序了。
从此你便成为一名 Python 用户了,现在让我们来学习更多有关 Python 的概念。

基础
只是打印出 hello world 肯定是不够的,是吗?你会希望做得比这还要多——你想要输入一 些内容,操纵它,然后从中得到一些输出出来的内容。我们可以在 Python 中通过使用变量与 常量来实现这一目标,在本章中我们还会学习其它的一些概念。
注释
注释 是任何存在于 # 号右侧的文字,其主要用作写给程序读者看的笔记。
举个例子:
或者:
你应该在你的程序中尽可能多地使用有用的注释:
解释假设
说明重要的决定
解释重要的细节
说明你想要解决的问题
说明你想要在程序中克服的问题,等等。
代码会告诉你怎么做,注释会告诉你为何如此。
这样做对你的程序的读者来说非常有用,他们可以很容易地理解你的程序是做什么的。请记 住,这个人可以是六个月后的你!
字面常量
一个字面常量(Literal Constants) 的例子是诸如 5 、 1.23 这样的数字,或者是如 这是一 串文本 或 This is a string 这样的文本。
用这样的称呼是因为它们是 字面上的 ——你用的就是它字面意义上的值或是内容。数字 2 总是表示它本身而非其他含义——它是一个 常量,因为它的值不能被改变。因此,所有的这 些都被称作字面常量。
数字
数字主要分为两种类型——整数(Integers)与浮点数(Floats)。
有关整数的例子即 2 ,它只是一个整数。
有关浮点数(Floating Point Numbers,在英文中也会简写为 floats )的例子是 3.23 或 52.3E-4 。其中, E 表示 10 的幂。在这里, 52.3E-4 表示 52.3 * 10^-4 。
针对有经验的程序员的提示
没有单独的 long 类型。 int 类型可以指任何大小的整数。
字符串
一串字符串(String)是 字符(Characters) 的 序列(Sequence)。基本上,字符串就是一 串词汇。
你将会在几乎所有你撰写的 Python 程序中使用字符串,所以对下面的部分你要多上点心。
单引号
你可以使用单引号来指定字符串,例如 '将我这样框进来' 或 'Quote me on this' 。
所有引号内的空间,诸如空格与制表符,都将按原样保留。
双引号
被双引号包括的字符串和被单引号括起的字符串其工作机制完全相同。例如 "你的名字是?" 或 "What's your name?" 。
三引号
你可以通过使用三个引号—— " " " 或 ' ' ' 来指定多行字符串。你可以在三引号之间自由地 使用单引号与双引号。来看看这个例子:
字符串是不可变的
这意味着一旦你创造了一串字符串,你就不能再改变它。尽管这看起来像是一件坏事,但实 际上并非如此。我们将会在稍后展现的多个程序中看到为何这一点不是一个限制。
针对 C/C++ 程序员的提示
Python 中没有单独的 char 数据类型。它并非切实必要,并且我相信你不会想念它的。
针对 Perl/PHP 程序员的提示
记住单引号括起的字符串和双引号括起的字符串是一样的——它们不存在任何区别。
格式化方法
有时候我们会想要从其他信息中构建字符串。这正是 format() 方法大有用武之地的地方。
将以下内容保存为文件 str_format.py :
输出:
它是如何工作的
一个字符串可以使用某些特定的格式(Specification),随后, format 方法将被调用,使用 这一方法中与之相应的参数替换这些格式。
在这里要注意我们第一次应用这一方法的地方,此处 {0} 对应的是变量 name ,它是该格式 化方法中的第一个参数。与之类似,第二个格式 {1} 对应的是变量 age ,它是格式化方法 中的第二个参数。请注意,Python 从 0 开始计数,这意味着索引中的第一位是 0,第二位是 1,以此类推。
我们可以通过联立字符串来达到相同的效果:
但这样实现是很丑陋的,而且也容易出错。其次,转换至字符串的工作将由 format 方法自 动完成,而不是如这般需要明确转换至字符串。再次,当时用 format 方法时,我们可以直 接改动文字而不必与变量打交道,反之亦然。
同时还应注意数字只是一个可选选项,所以你同样可以写成:
这样做同样能得到与前面的程序一样的输出结果。
Python 中 format 方法所做的事情便是将每个参数值替换至格式所在的位置。这之中可以有 更详细的格式,例如:
输出:
由于我们正在讨论格式问题,就要注意 print 总是会以一个不可见的“新一行”字符( \n ) 结尾,因此重复调用 print 将会在相互独立的一行中分别打印。为防止打印过程中出现这一 换行符,你可以通过 end 指定其应以空白结尾:
输出结果如下:
或者你通过 end 指定以空格结尾:
输出结果如下:
转义序列
想象一下,如果你希望生成一串包含单引号( ' )的字符串,你应该如何指定这串字符串? 例如,你想要的字符串是 "What's your name?" 。你不能指定 'What's your name?' ,因为这会使 Python 对于何处是字符串的开始、何处又是结束而感到困惑。所以,你必须指定这个单 引号不代表这串字符串的结尾。这可以通过 转义序列(Escape Sequence) 来实现。你通过 \ 来指定单引号:要注意它可是反斜杠。现在,你可以将字符串指定为 'What\'s your name?' 。
另一种指定这一特别的字符串的方式是这样的: "What's your name?" ,如这个例子般使用 双引号。类似地, 你必须在使用双引号括起的字符串中对字符串内的双引号使用转义序列。 同样,你必须使用转义序列 \\ 来指定反斜杠本身。
如果你想指定一串双行字符串该怎么办?一种方式即使用如前所述的三引号字符串,或者你 可以使用一个表示新一行的转义序列—— \n 来表示新一行的开始。下面是一个例子:
另一个你应该知道的大有用处的转义序列是制表符: \t 。实际上还有很多的转义序列,但 我必须只在此展示最重要的一些。
还有一件需要的事情,在一个字符串中,一个放置在末尾的反斜杠表示字符串将在下一行继 续,但不会添加新的一行。来看看例子:
相当于
原始字符串
如果你需要指定一些未经过特殊处理的字符串,比如转义序列,那么你需要在字符串前增加 r 或 R 来指定一个 原始(Raw) 字符串 。下面是一个例子:
针对正则表达式用户的提示
在处理正则表达式时应全程使用原始字符串。否则,将会有大量 Backwhacking 需要处 理。举例说明的话,反向引用可以通过 '\\1' 或 r'\1' 来实现。
变量
如果只使用字面常量很快就会让人感到无聊——我们需要一些能够存储任何信息并且也能操 纵它们的方式。这便是 变量(Veriables) 登场的时刻。正如其名字所述那般,变量的值是可 以变化的,也就是说,你可以用变量来存储任何东西。变量只是你的计算机内存中用以存储 信息的一部分。与文字常量不同,你需要通过一些方式来访问这些变量,因此,你需要为它 们命名。
标识符命名
变量是标识符的一个例子。标识符(Identifiers) 是为 某些东西 提供的给定名称。在你命名 标识符时,你需要遵守以下规则:
第一个字符必须是字母表中的字母(大写 ASCII 字符或小写 ASCII 字符或 Unicode 字 符)或下划线( _ )。
标识符的其它部分可以由字符(大写 ASCII 字符或小写 ASCII 字符或 Unicode 字符)、 下划线( _ )、数字(0~9)组成。
标识符名称区分大小写。例如, myname 和 myName 并不等同。要注意到前者是小写字 母 n 而后者是大写字母 N 。
有效 的标识符名称可以是 i 或 name_2_3 ,无效 的标识符名称可能是 2things , this is spaced out , my-name 和 >a1b2_c3 。
数据类型
变量可以将各种形式的值保存为不同的数据类型(Data Type)。基本的类型是我们已经讨论 过的数字与字符串。在后面的章节中,我们会了解如何通过 类(Classes) 类创建我们自己 的类型。
对象
需要记住的是,Python 将程序中的任何内容统称为 对象(Object)。这是一般意义上的说 法。我们以“某某对象(object)”相称,而非“某某东西(something)”。
针对面向对象编程语言用户的提示:
Python 是强(Strongly)面向对象的,因为所有的一切都是对象, 包括数字、字符串与 函数。
接下来我们将看见如何使用变量与字面常量。你需要保存以下案例并试图运行程序。
如何编写 Python 程序
从今以后,保存和运行 Python 程序的标准步骤如下:
对于 PyCharm 用户
打开 PyCharm。
以给定的文件名创建新文件。
输入案例中给出的代码。
右键并运行当前文件。
注意:每当你需要提供 命令行参数(Command Line Arguments)时,点击 Run -> Edit Configurations 并在 Script parameters: 部分输入相应参数,并点击 OK 按钮:

对于其他编辑器用户
1. 打开你选择的编辑器。
2. 输入案例中给出的代码。
3. 以给定的文件名将其保存成文件。
4. 在解释器中通过命令 python program.py 来运行程序。
案例:使用变量与字面常量
输入并运行以下程序:
输出:
它是如何工作的
下面是这一程序的工作原理。首先,我们使用赋值运算符( = )将字面常量数值 5 赋值给 变量 i 。这一行被称之为声明语句(Statement)因为其工作正是声明一些在这一情况下应 当完成的事情:我们将变量名 i 与值 5 相连接。然后,我们通过 print 语句来打印变量 i 所声明的内容,这并不奇怪,只是将变量的值打印到屏幕上。
接着,我们将 1 加到 i 变量所存储的值中,并将得出的结果重新存储进这一变量。尔后我 们将这一变量打印出来,并期望得到的值应为 6 。
类似地,我们将字面文本赋值给变量 s ,并将其打印出来。
针对静态编程语言程序员的提示
变量只需被赋予某一值。不需要声明或定义数据类型。
逻辑行与物理行
所谓物理行(Physical Line)是你在编写程序时 你所看到 的内容。所谓逻辑行(Logical Line)是 Python 所看到 的单个语句。Python 会假定每一 物理行 会对应一个 逻辑行。
有关逻辑行的一个例子是诸如 print('hello world') 这样一句语句——如果其本身是一行 (正如你在编辑器里所看到的那样),那么它也对应着一行物理行。
Python 之中暗含这样一种期望:Python 鼓励每一行使用一句独立语句从而使得代码更加可 读。
如果你希望在一行物理行中指定多行逻辑行,那么你必须通过使用分号( ; )来明确表明逻辑 行或语句的结束。下面是一个例子:
实际上等同于
同样可以看作
也与这一写法相同
然而,我强烈建议你对于每一行物理行最多只写入一行逻辑行。这个观点就是说你不应该使 用分号。实际上,我从未在 Python 程序中使用、甚至是见过一个分号。
在一类情况下这一方法会颇为有用:如果你有一行非常长的代码,你可以通过使用反斜杠将 其拆分成多个物理行。这被称作显式行连接(Explicit Line Joining) :
输出:
类似地,
等同于
在某些情况下,会存在一个隐含的假设,允许你不使用反斜杠。这一情况即逻辑行以括号开 始,它可以是方括号或花括号,但不能是结束括号。这被称作 隐式行连接(Implicit Line Joining)。你可以在后面当我们讨论列表(List)的章节时了解这一点。
缩进
空白区 在 Python 中十分重要。实际上,空白区在各行的开头非常重要。这被称作 缩进 (Indentation)。在逻辑行的开头留下空白区(使用空格或制表符)用以确定各逻辑行的缩 进级别,而后者又可用于确定语句的分组。
这意味着放置在一起的语句必须拥有相同的缩进。每一组这样的语句被称为 块(block)。我 们将会在后文章节的案例中了解块这一概念是多么重要。
有一件事你需要记住:错误的缩进可能会导致错误。下面是一个例子:
当你运行这一程序时,你将得到如下错误:
你会注意到第二行开头有一个空格。Python 指出的错误信息告诉我们程序的语法是无效的, 意即,程序没有被正确地写入。这一信息对你的意义是 你不能任意开始一个新的语句块(当 然,除非你一直在使用默认的主代码块)。你可以使用新块的情况将会在后面诸如控制流等 章节加以介绍。
如何缩进
使用四个空格来缩进。这是来自 Python 语言官方的建议。好的编辑器会自动为你完成这 一工作。请确保你在缩进中使用数量一致的空格,否则你的程序将不会运行,或引发不 期望的行为。
针对静态编程语言程序员的提示
Python 将始终对块使用缩进,并且绝不会使用大括号。你可以通过运行 from __future__ import braces 来了解更多信息。
总结
现在我们已经了解了诸多本质性的细节,我们可以前去了解控制流语句等更多更加有趣的东 西。记得一定要充分理解你在本章所阅读的内容。

下一篇专栏
