%

交互的提示符——不要输入什么:提示符和注释

说到提示符,本书有时显示系统提示符为一个通用的 % ,有时是完全的 C:\code> Windows 形式。前者意味着与平台无关(且是从 Linux 早期版本的使用中继承下来的),后者是专用于 Windows 的。在本书中为了可读性,我还在系统提示符后添加了一个空格。当被使用时,在系统命令行开头的 % 符号代表了系统提示符,或你机器上的其他任何符号。比如,在我的机器上 % 代表 Windows 命令提示符中的 C:\code>,在我的 Gygwn 安装中就是 $。 对初学者:不要键入你在本书的互动代码块中看到的 % 符号(或 它有时代表的 C:\code 系统提示符)—— 这是系统打印的文本。只需要键入在这些系统提示符后的文本。类似的,不要键入在解释器交互代码块的行的开头显示的 >>> 和 … 符号 —— 这些是 Python 自动显示的作为交互式代码输入视觉指引的提示符。只在这些 Python 提示符后键入。比如, … 提示符在一些 shell 中用作连续行,但是不会出现在 IDLE 中,且在本书中的一些但不是所有的代码块中显示;如果它在你的界面中不存在,不要自己去输入它。 为帮助你记住这个,本书中的用户输入用粗体显示,提示符就没有。这些提示符在一些系统中可能不同(比如,在第 2 章中描述过的关注性能的 PyPy 实现使用四个字符 >>>> 和 ….),但应用的规则相同。还要记住在这些系统和 Python 提示符后键入的命令会立即执行且通常不会被保存在我们将创建的源文件中;我们将在稍后看一下为什么这个差别很重要。 同样的,你通常不需要键入那些在本书代码块中以 #号开头的文本 —— 因为你将学习到,这些是注释,不是可执行的代码。除了当在用于 Unix 或 PYthon 3.3 Windows 启动器的脚本顶部时,# 被用来引入一个指令,其他地方你可以安全地忽略跟在它后面的文本(更多关于 Unix 和启动器的知识请参加本章后面部分和附录 B) 本文章首发在 LearnKu.com 网站上。

上一篇下一篇

Markdown 文本

纠错改进

3.2 输入 - 图1

hustnzj

版主 2.2k 声望

OS: macOS Monterey

交互的提示符——不要输入什么:提示符和注释——注意

如果你跟着示例练习操作下去,从第 17 章开始,交互式代码块将去掉大多数 “…” 连续提示符来帮助剪贴更大段的代码(如从电子书或其他地方来的函数和类)。至少一开始,手动输入代码,体验语法细节和错误是重要的。一些例子将通过自己来展示(注:在交互式环境中)或者在本书的实例包(根据前言)中可用的命名文件,并且我们将时常在代码块格式见切换,如果你看到 “>>>”,它意味着代码正在被交互式地输入。

交互的提示符——交互式地运行代码

搞定了这些预备工作,让我们开始键入一些真正的代码。不管以何种方式开始,Python 交互式会话都会先打印两行信息文本,提供 Python 的版本号和之前显示过的一些提示(这些提示我将在本书的大部分例子中省略以节约空间),然后当在它等待你键入新的 Python 语句或表达式时,使用 >>> 提示输入。 当交互地工作时,在你按下回车键后,代码的结果显示在 >>> 输入行的下方。比如,下面是两行 Python <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">print</font> 语句的结果( 在 Python 3.X <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">print</font> 确实是一个函数调用,但在 2.X 中不是,所以这里的小括号只在 3.X 中是必须的):
  1. % python
  2. >>> print('Hello world!')
  3. Hello world!
  4. >>> print(2 ** 8)
  5. 256
情况就是这样 —— 我们只是运行了一些 Python 代码(难道你期望 Spanish Inquisition 吗?)(注:Spanish Inquisition 是一个习语,常被用作(笑话的)妙语或幽默地提及令人惊讶或意外的事件,这里暗示读者看到的结果很普通,并不是让人惊讶的)。现在不用担心这里显示的 <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">print</font> 语句的细节;我们将在下一章深入研究语法。简而言之,他们打印了一个 Python 字符串和一个整数,如出现在每个 >>> 输入行后面的输出行所显示的那样(2 ** 8 意味着在 Python 中的 2 的 8 次方) 当像这样交互式地编码时,你可以按你喜欢的那样键入尽可能多的 Python 命令;每个都在它被回车后立即运行。而且,因为交互式会话自动打印了你键入表达式的结果,你通常不需要再这个提示符这里明确地说 “print”:
  1. >>> lumberjack = 'okay'
  2. >>> lumberjack
  3. 'okay'
  4. >>> 2 ** 8
  5. 256
  6. >>> # 使用 Ctrl-D (在 Unix 上) 或 Ctrl-Z (在 Windows 上) 来退出会话
  7. %
这里,第一行通过将一个值赋值给一个变量(lumberjack)来保存它,它是被赋值操作创建的;键入的最后两行是表达式<font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">lumberjack</font> <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">2 ** 8</font>),它们的结果是自动显示的。再说一次,要退出像这样的交互式会话然后返回系统 shell 提示符:在类 Unix 机器上键入 Ctrl-D,在 Windows 上键入 Ctrl-Z。在随后讨论的 IDLE GUI 中,键入 Ctrl-D 或简单的关闭窗口。 注意在这个代码块的右边,关于这个(斜体中包含的信息)的斜体标注(这里以 “#” 开始)。我将从始至终使用这些来添加关于什么正在被阐述的注释,但你不需要亲自键入这个文本。事实上,就像系统和 Python 提示符,当它在系统命令行上时,你不应该键入这个;这个 “#” 部分被 Python 作为一个注释但在系统提示符那里可能是一个错误。 现在,在这个会话的代码中我们没有做许多事 —— 只是键入了一些 Python <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">print</font> 和赋值语句,还有一些表达式,这些我们将随后详细研究。主要注意的是:当回车键被按下,解释器立即执行了在每一行键入的代码。 比如,当我们在 >>> 提示符键入第一个 <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">print` 语句时,输出(一个 Python 字符串)马上被显示出来。没必要创建一个源码文件,且没必要首先通过一个编译器和链接器来运行代码,就像当使用如 C 或 C++ 语言时通常做的那样。在随后章节中将看到,可以在交互式提示符那里运行多行语句;输入这种语句的所有行并按下回车两次来添加一个空行后,它会立即执行。

交互的提示符——为什么要使用交互式提示符?

交互式提示符在键入命令的同时运行代码和回显结果,但它没有把代码保存到文件中。虽然这意味着不能在交互式会话中完成大部分的编码,但交互式提示符证明了它是实时地对语言进行实验和测试程序文件的好地方。

交互的提示符——为什么要使用交互式提示符?——实验

因为代码是被立即执行的,交互式提示符是对语言进行实验的完美场所且将在本书中经常用来展示更小的例子。事实上,要记住的第一经验法则:如果在任何时候对一段 Python 代码如何工作有怀疑,启动交互式命令行并动手试试看看会发生什么。 比如,假如在阅读一段 Python 程序的代码且恰好碰到了像 <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">'Spam!' * 8</font> 这样的不懂其含义的表达式。此时,可以花 10 分钟费力的查阅手册,书籍和网络来努力弄清楚这个代码是做什么的,或者可以简单的交互式地运行:
  1. % python
  2. >>> 'Spam!' * 8 # Learning by trying
  3. 'Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam!'
在交互式提示符收到的立即返回通常是推测一段代码作用的最快方式。在这里,很明显它是字符串重复:在 Python 中,* 对数字意味着乘,但对字符串却是重复 —— 它像将一个字符串重复地连接到自身一样(参见第 4 章中更多关于字符串的知识) 通过这种方式实验,你基本上造成任何破坏 —— 至少,现在还不会。要进行真正的破坏,如删除文件和运行 shell 命令,必须真正的努力尝试,明确地通过导入模块(要变得这么危险,通常还需要知道关于 Python 的系统接口的更多知识)。纯 Python 代码几乎总是能安全的运行。 比如,在交互式提示符犯一个错误时,仔细看发生了什么:
  1. >>> X # Making mistakes
  2. Traceback (most recent call last):
  3. File "<stdin>", line 1, in <module>
  4. NameError: name 'X' is not defined
在 Python 中,在变量被赋值前使用它总是一个错误 —— 否则,如果变量名被默认值填充,一些错误可能就会无法察觉。这意外着在可以往计数器添加(数字)前,必须先初始化它为 0,在扩展列表前必须先初始化它等等;不需要声明变量,但必须先对他们进行赋值,才可以获取他们的值。 关于这个后面还会学;这里重要的一点是,当以这种方式犯错时,不会让 Python 或电脑崩溃。相反,会得到一个有意义的错误信息,指出错误和造成错误的代码行数,且可以继续会话或脚本。事实上,一旦适应了 Python,它的错误信息通常可以提供需要的尽可能多的调试支持(可以在侧边栏调试 Python 代码中学到更多关于调试选项的知识)

交互的提示符——为什么要使用交互式提示符?——测试

当学习语言时,交互式解释器不仅是作为做实验的工具,还是测试已写在文件中的代码的理想场所。可以交互式地导入模块文件并通过实时地在交互式提示符键入调用,对他们定义的工具运行测试。 比如,下面代码测试了在一个预编码模块(在与 Python 一起发布的标准库中)中的一个函数(它打印了当前工作目录的名称,带有一个双反斜杠,只代表一个),但同样的事情也可以适用于你自己编写的模块文件:
  1. >>> import os
  2. >>> os.getcwd() # Testing on the fly
  3. 'c:\\code'
更普遍的是,交互式提示符是测试程序组件的地方,不管他们的来源 —— 可以导入并测试 Python 文件中的函数和类,键入对链接进来的 C 函数的调用,练习 Jython 下的 Java 类,等等。部分因为交互式特性,Python 支持一个实验性和探索性的编程风格,一开始时会很方便。虽然 Python 程序员也使用文件中的代码来测试(且在本书后面将学习这种测试的简化方法),但对许多人来说,交互式提示符仍是他们测试的首选。 本文章首发在 LearnKu.com 网站上。

上一篇下一篇

Markdown 文本

纠错改进


交互的提示符——使用笔记:交互的提示符

虽然交互式提示符易于使用,但有一些初学者应该记住的技巧。如下是常见的错误列表以供参考,但如果提前阅读它们,可能会没那么头疼:
  • 只输入 Python 命令。首先,记住在 Python 的 >>> 提示符只能键入 Python 代码,而不是系统命令。在 Python 代码中是有方法去运行系统命令的(比如,使用 os.system),但它们不如简单地键入这些命令本身那么直接。
  • **<font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">print</font>** **语句只在文件中才必须**。因为交互式解释器自动打印表达式的结果,不需要交互地键入完整的 <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">print</font> 语句。这是一个好功能,但它往往会让用户在文件中编写代码时感到困惑:在代码文件中,必须使用 <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">print</font> 语句来查看输出,因为表达式结果不是自动回显的。记住,在文件中,必须说 <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">print</font>,但交互中这是可选的。
  • (暂时)不要在交互式提示符下缩进。当输入 Python 程序时,不管是交互式地还是在文本文件中,都要确保在第一行开始所有非嵌套的语句(也就是说,一直到最左边)。如果你不这么做,Python 可能会打印 “语法错误” 信息,因为代码左边的空白被作为分组嵌套语句的缩进。记住,前导的空白导致错误信息,所以在交互式提示符不要以空白或制表符开头,除非它是嵌套的代码。
  • 注意复合语句的提示符变化。在第 4 章之前将不会碰到复合(多行)语句且在第 10 章前都不会严肃的讨论它,但作为一个预习,应该知道当交互地输入复合语句的第 2 行及之后的行时,提示符可能会改变。在简单的 shell 窗口界面,对于第 2 行及之后的行,交互式提示符变为 … 而不是 >>>;在 IDLE GUI 界面,首行之后的行会被自动缩进。
将在第 10 章看到为什么这个很重要。目前,当输入代码时,如果碰巧遇到一个 … 提示符或一个空白行,它很可能意味着已经不知道怎么的忽悠了交互式 Python,让它认为你正在输入一个多行的语句。尝试敲击回车键或 Ctrl-C 组合键来返回主提示符。>>> 和 … 提示符字符串也可以被改变(它们在内置的 <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">sys</font> 模块中可用),但我将假设他们不在本书的代码列表块中。
  • 用一个空白行终结在交互式提示符的复合语句。在交互式提示符,需要插入一个空白行(通过在行的开头按回车键)来告诉交互式 Python 已经完成了多行语句的输入。也就是说,必须按回车两次来运行一个复合语句。作为对比,空白行在文件中不是必须的且如果存在也会被简单地忽略。当交互地工作时,如果在复合语句的结尾不按两次回车,就会被困在一个不确定的状态,因为交互式解释器将不会做任何事 —— 它在等待你再次按下回车!
  • 交互式提示符一次运行一个语句。在交互式提示符,必须先运行完成一个语句,再输入另一个语句。对简单语句这很自然,因为按下回车键就运行输入的语句。然而,对复合语句,记住在可以输入下一个语句前,必须输入一个空白行来终结语句并运行它。

交互的提示符——使用笔记:交互的提示符——输入多行语句

冒着重复自己的危险 —— 我已经收到了多封来自读者的电子邮件,他们被(上一节)最后两点所困扰,所以这两点很可能值得再次强调。在下一章将介绍多行(又名复合)语句,并且将在本书稍后更正式探索它们的语法。然而,因为它们的行为在文件和交互式提示符中稍后不同,因此这里需要注意两点。 首先,确保用一个空白行在交互式提示符处终结像 <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">for</font> 循环和 <font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">if</font> 测试这种多行复合语句。换句话说,你必须按下回车键两次,来终结整个多行语句并让它运行。比如(不是故意的双关语 —— 因为 For Example):
  1. >>> for x in 'spam':
  2. ... print(x) # Press Enter twice here to make this loop run
  3. ...
然而,在脚本文件中不需要复合语句后的空白行。这只在交互式提示符处才需要。在文件中,空白行不是必须的且如果存在会被简单地忽略;在交互式提示符处,它们终结多行语句。提示:在前面的<font style="color:rgb(133, 128, 128);background-color:rgb(249, 250, 250);">...</font> 连续行提示符是作为视觉指引被 Python 自动打印的;在你的界面(如 IDLE) 中可能不会出现,并且有时会被本书省略,但如果它不在的话不要去手动输入它。 还要记住交互式提示符一次只能运行一个语句:在可以输入下一个语句前,必须按下回车两次来运行一个循环或其他的多行语句:
  1. >>> for x in 'spam':
  2. ... print(x) # Press Enter twice before a new statement
  3. ... print('done')
  4. File "<stdin>", line 3
  5. print('done')
  6. SyntaxError: invalid syntax
这意味着不能将多行代码剪切并粘贴到交互式提示符,除非代码在每个复合语句后包括空行。这种代码更适合在文件中运行 —— 这将进入下一节的主题。