这是本章的输入练习(将其命名为 cal.py):(import 实际上查找名为 calendar.py 的文件并读取它。如果文件名为 calendar.py,并且看到 "import calendar",它会尝试读取自身,这种做法通常效果很差。)

import calendar
year = int(input("请输入年份:"))
calendar.prcal(year)

这是我得到的部分输出:

请输入年份:2001

                                 2001                                  

       一月                    二月                    三月      

周 一 周 二 周 三 周 四 周 五 周 六 周 日      周 一 周 二 周 三 周 四 周 五 周 六 周 日      周 一 周 二 周 三 周 四 周 五 周 六 周 日
1  2  3  4  5  6  7                1  2  3  4                1  2  3  4     
8  9 10 11 12 13 14       5  6  7  8  9 10 11       5  6  7  8  9 10 11
15 16 17 18 19 20 21      12 13 14 15 16 17 18      12 13 14 15 16 17 18     
22 23 24 25 26 27 28      19 20 21 22 23 24 25      19 20 21 22 23 24 25     
29 30 31                  26 27 28                  26 27 28 29 30 31        

(我省略了一些输出,但你应该能理解程序的作用。)那么这个程序到底做了什么呢?第一行 import calendar 使用了一个新的命令 importimport 命令加载一个模块(在本例中是 calendar 模块)。要查看标准模块中的可用命令,可以查阅 Python 库参考(如果你下载了的话)或者访问 http://docs.python.org/3/library/。如果你查看 calendar 模块的文档,会看到一个叫做 prcal 的函数,它会打印某一年的日历。calendar.prcal(year) 这一行使用了该函数。总结来说,使用模块时,先通过 import 导入,然后使用 module_name.function 来调用模块中的函数。另一种写法是:

from calendar import prcal

year = int(input("请输入年份:"))
prcal(year)

这个版本从模块中导入了一个特定的函数。下面是另一个使用 Python 库的程序(将其命名为 clock.py)(按 Ctrl + C 键组合可以终止程序):

from time import time, ctime

prev_time = ""
while True:
    the_time = ctime(time())
    if prev_time != the_time:
        print("当前时间是:", ctime(time()))
        prev_time = the_time

部分输出如下:

当前时间是: Sun Aug 20 13:40:04 2000
当前时间是: Sun Aug 20 13:40:05 2000
当前时间是: Sun Aug 20 13:40:06 2000
当前时间是: Sun Aug 20 13:40:07 2000

错误信息:

Traceback (most recent call last):
 File "clock.py", line 5, in ?
    the_time = ctime(time())

KeyboardInterrupt

输出显然是无限循环的,所以我取消了它(或者输出会继续,直到按下 Ctrl+C)。程序做的是无限循环(因为 True 永远为真,while True: 会一直执行),每次检查时间是否改变,如果时间改变,则打印出来。请注意,在 from time import time, ctime 中,多个名称是如何被导入的。

Python 库包含了许多有用的函数,这些函数能增强程序的功能,且许多函数可以简化 Python 编程。

练习

high_low.py 程序从 "决策" 部分修改为使用一个 0 到 99 之间的随机整数,而不是硬编码的 7。使用 Python 文档查找一个合适的模块和函数来实现这一点。

解决方案

其他模块

有时你可能想要使用一个不包含在 Python 安装中的模块。你可以导入这些模块,但你需要确保它们已经安装在你的计算机上。

创建你自己的模块

当 Python 执行 import 命令时,它会首先检查当前目录中的文件,然后是 site-packages 或已安装的模块。如果你想创建自己的模块,只需在当前目录下创建一个 .py 文件,并使用以下命令:

import module

这将尝试从当前目录中导入名为 module.py 的文件。如果找不到,它将从 site-packages 或预安装的模块中查找。通过将 module 替换为你创建的 .py 文件的名称,就可以导入该文件。

然而,当导入模块时,Python 会将文件作为程序运行,因此文件中的所有代码都会被执行。你应当将所有代码封装到函数中。

__name__ == '__main__' 的技巧

在 Python 中,变量 __name__ 会给出当前程序的名称。如果你导入的模块打印 __name__ 变量,它会打印出模块的名称。如果当前文件打印 __name__ 变量,它会打印出 '__main__',表示它是主程序。

如果使用 if 语句检查 __name__ 变量,并在程序是主程序时执行代码,就可以避免在导入模块时无意中执行代码。假设你有一个文件,它运行一些代码,并且它还有一个你希望在另一个程序中使用的函数。但你只希望导入函数,而不运行代码。通过设置以下代码,它只会在运行该文件时执行,而不会在导入时执行:

if __name__ == '__main__':
    pass

在这个例子中,如果文件被运行(而不是导入),它将执行 pass 命令。你可以将 pass 替换为在不导入时希望执行的代码。只需确保正确缩进代码。

pip 模块

pip 模块是随 Python 安装而提供的,它作为模块下载和管理器。你可以使用 pip 从互联网上下载其他模块。

pip 模块不是在 Python 解释器中使用的,而是通过命令行运行。要使用它,请打开命令行解释器(在 Windows 中是命令提示符,在 Mac/Linux 中是终端),并输入以下代码:

py3 -m pip install module

或者,使用以下代码:

pip install module

这将尝试从用户提交的 Python 模块数据库下载并安装名为 module 的模块。module 可以替换为你想要安装的模块名称。

Last modified: Saturday, 11 January 2025, 11:31 AM