测试你的知识:Part I 练习 —— 答案

未匹配的标注

是时候开始自己编写一点代码了。这第一套练习相当简单,但旨在让你为阅读本书余下部分做好准备,而且它的一些问题暗示了后面章节中接下来的主题。确保到附录D的Part I 查看答案;这些练习和它们的答案有时包含了正文中没有讨论到的额外信息,所以即使你成功的独立回答出了所有问题,你也应该看一下这些答案。

  1. 交互

    使用系统命令行,IDLE,或在你平台上适用的任何其他方法,来开启Python交互式命令行(>>> 提示符),然后输入表达式 "Hello World!"(包括双引号)。这个字符串应该对你回显出来。这个练习的目的是让你配置好运行Python的环境。在一些场景中,你可能需要首先运行一个 cd shell 命令,键入Python可执行文件的完整路径,或把它的路径添加到你的PATH 环境变量中。如果想的话,在Unix系统上你可以将PATH设置到你的 .cshrckshrc 文件中来让Python永远可用;在Windows上要达到这个效果,环境变量GUI通常就是你想要的。参见附录A来获取关于环境变量设置的帮助。

    % python
    ...copyright information lines...
    >>> "Hello World!"
    'Hello World!'
    >>> # Use Ctrl-D or Ctrl-Z to exit, or close window
  2. 程序

    使用你选择的文本编辑器,编写一个含有单一语句 print('Hello module world!') 的简单模块文件并且将它存储为 module1.py。现在,通过使用任何你喜欢的启动选项来运行这个文件:在IDLE中运行它,点击它的文件图标,在系统 shell的命令行上将其传递给Python解释器(比如,python module1.py),内置 exec 调用,导入与重载,诸如此类。事实上,尽你所能的使用尽可能多的本章讨论过的启动技术,通过运行文件来实验。哪一种技术看起来最简单?(当然,这个问题没有正确答案)

    module1.py

    print('Hello module world!')
    % python module1.py
    Hello module world!
  3. 模块

    开启Python交互式命令行(>>>提示符)然后导入你在练习2中编写的模块。尝试将文件移动到不同的目录然后从它的原始目录再次导入(也就是说,当你导入时在原始目录运行Python,也就是说先退出Python shell)。发生了什么?(提示:在原始目录中是不是仍然有一个 module1.pyc的字节码文件,或在那里的__pycache__子目录中有类似的东西?)

    % python
    >>> import module1
    Hello module world!
    >>>

    测试:将 module1.py 移动到 ./testdir 子目录,然后再次导入会发生什么?

    mv module1.py testdir/

    再次导入:

    % python
    >>> import module1
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    ModuleNotFoundError: No module named 'module1'
    >>>

    会发现出错,发现原始目录中并没有 module1.pyc的字节码文件,而是在__pycache__子目录中有 module1.cpython-310.pyc 这个文件。

    这个现象说明了什么问题?

    这个现象说明,在导入 Python 模块时,Python 会搜索 sys.path 中的路径,如果找不到该模块,就会引发 ModuleNotFoundError 错误。在这种情况下,将模块移动到子目录后,Python 无法在 sys.path 中找到该模块,因此导入模块时会出错。

    要解决这个问题,需要在代码中添加以下语句,以确保子目录包含在 sys.path 中:

    import sys
    sys.path.append('testdir')

    然后,可以再次尝试导入模块:

    % python
    >>> import module1
    Hello module world!
    >>>
  4. 脚本

    如果你的平台支持,在module1.py文件的顶部添加 #! 行,给此文件可执行的权限,然后作为可执行文件直接运行。第一行需要包含什么?#! 通常只在 Unix,Linux 和类Unix系统如Mac OS X上有意义;如果你工作在Windows上,尝试通过在一个命令提示符窗口,只列出它的名字而不需要单词“Python”在它的前面来运行文件(这在最新版本的Windows上适用),或通过 Start->Run...对话框,或类似的方法。如果你正在使用Python3.3或和它一起安装的Windows启动器,尝试修改脚本的 #! 行来启动可能已经安装到电脑上的不同的Python版本(或等价地,完成附录B中的教程)

    编辑 module1.py

    #!/usr/bin/env python
    print('Hello module world!')
    % chmod +x module1.py
    % ./module1.py
    Hello module world!
  5. 错误和调试

    在Python交互式命令行,输入数学表达式和赋值语句来实验。在这个过程中,输入表达式 2 ** 5001 / 0,然后像我们在本章之前做的那样引用一个未定义的变量名。发生了什么?

    你可能还不知道,但当你犯错误时,你就正在进行异常处理(将在Part VII中深入探索的主题)。技术上讲你正在触发所谓的默认异常处理程序——打印一个标准错误信息的逻辑。如果你没有捕获错误,默认的处理程序就会去捕获然后在响应中打印出标准的错误信息。

    在Python中,异常也和调试的概念绑定在一起。当你首次开始学习时,Python的关于异常的默认错误消息将尽可能多地提供你所需要的错误处理支持——它们给出了错误的原因,和显示出当错误发生时正在被执行的代码行。要获取更多关于调试的信息,参见侧边栏 调试Python代码

    % python
    >>> 2 ** 500
    3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376
    >>> 1/ 0
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    ZeroDivisionError: division by zero
    >>> spam
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    NameError: name 'spam' is not defined
    >>>
  6. 中断和循环

    在Python命令行,输入:

    L = [1, 2] # 创建一个两个项目的列表
    L.append(L) # 将L作为单独的一项添加给自己
    L # 打印L:一个循环的对象

    发生了什么?在Python所有最近的版本中,你将看到一个我们将在答案附录中描述的奇怪输出,而且它会在我们在本书的下一部分中学习引用时更加有意义。如果你正在使用老于1.5.1的Python版本,在大多数平台上,一个 Ctrl-C 组合键很可能会有帮助。你认为为什么你的Python版本会以它对这段代码响应的方式那样去响应?

    警告

    如果你确实有一个老于版本1.5.1的Python(但愿今天很少出现这种情况!),在运行这个测试前,确保你的机器使用Ctrl-C(或其他类似)的组合键可以停止程序,否则你可能需要等待很长一段时间。

    % python
    >>> L = [1,2]
    >>> L.append(L)
    >>> L
    [1, 2, [...]]
    >>>

    image-20230106184512235

  7. 文档

    在继续前进前,至少花15分钟浏览Python库和语言手册来了解标准库中的可用工具和文档集的结构。至少要花这么长的时间来熟悉手册集合中主要主题的位置;一旦熟悉后,要找到所需要的东西就很容易了。可以通过在一些Windows上的Python开始按钮入口,或在IDLE的帮助下拉菜单中的Python Docs选项,或在线的http://www.python.org/doc 来查找这个手册。在第15章还将讲述更多关于手册和其他可用文档资源(包括PyDoc 和 help 函数)。如果还有时间,去探索Python网站,和它的PyPi第三方扩展仓库。特别是检查一下 Python官网文档和搜索页;它们可是非常重要的资源。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~