跳转到内容

Python 3 非程序员教程/使用模块

来自 Wikibooks,开放世界中的开放书籍

这是本章的打字练习(将其命名为 cal.py(import 实际上会寻找一个名为 calendar.py 的文件并读取它。如果文件名为 calendar.py 并且它看到一个 "import calendar",它会尝试读取它本身,这在最好的情况下也很差。))

import calendar
year = int(input("Type in the year number: "))
calendar.prcal(year)

这是我得到的部分输出

Type in the year number: 2001

                                 2001                                  

       January                  February                    March      

Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
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 使用了一个新的命令 import。命令 import 加载一个模块(在本例中是 calendar 模块)。要查看标准模块中可用的命令,请查看 python 的库参考(如果您下载了它),或访问 https://docs.pythonlang.cn/3/library/。如果您查看日历模块的文档,它列出了一个名为 prcal 的函数,它打印一年中的日历。calendar.prcal(year) 使用此函数。总之,要使用一个模块,请 import 它,然后使用 module_name.function 来表示模块中的函数。另一种编写程序的方式是

from calendar import prcal

year = int(input("Type in the year number: "))
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("The time is:", ctime(time()))
        prev_time = the_time

部分输出如下

The time is: Sun Aug 20 13:40:04 2000
The time is: Sun Aug 20 13:40:05 2000
The time is: Sun Aug 20 13:40:06 2000
The time is: Sun Aug 20 13:40:07 2000

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

KeyboardInterrupt

当然,输出是无限的,所以我取消了它(或者至少输出继续,直到按下 Ctrl+C)。该程序只是执行一个无限循环(True 始终为真,因此 while True: 永久执行)并且每次检查时间是否已更改,如果已更改,则打印它。请注意,在 from time import time, ctime 行中如何使用 import 语句后的多个名称。

Python 库包含许多有用的函数。这些函数为您的程序提供了更多功能,其中许多函数可以简化 Python 中的编程。

决策 部分中的 high_low.py 程序改写为使用 0 到 99 之间的随机整数,而不是硬编码的 7。使用 Python 文档找到合适的模块和函数来执行此操作。

解决方案

决策 部分中的 high_low.py 程序改写为使用 0 到 99 之间的随机整数,而不是硬编码的 7。使用 Python 文档找到合适的模块和函数来执行此操作。

from random import randint
number = randint(0, 99)
guess = -1
while guess != number: 
    guess = int(input ("Guess a number: "))
    if guess > number:
        print("Too high")
    elif guess < number:
            print("Too low")
print("Just right")


其他模块

[编辑 | 编辑源代码]

有时您想使用 Python 安装中未提供的 Python 模块。您也可以导入它们,但必须在您的计算机上安装它们。

创建您自己的模块

[编辑 | 编辑源代码]

当 python 读取 import 命令时,它首先检查您目录中的文件,然后检查 site-packages 或预安装的模块。要创建您自己的模块,只需在当前目录中创建一个 .py 文件并使用以下命令

import module

这将尝试从您的当前目录导入文件 module.py,如果找不到,则从 site-packages 和预打包的模块中导入。将 module 更改为您创建的 .py 文件的名称将导入该文件。

但是,当它导入模块时,它基本上会将该文件作为程序启动,因此那里的任何代码都将被运行。您希望将所有代码分组到函数中。

__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 可以更改为模块的名称。

Python 3 非程序员教程
 ← 字典 使用模块 更多关于列表的信息 → 
华夏公益教科书