第55课 使用验证码模块

verificationCode.py模块创建完成后,使用它发送以及核验验证码。

首先要导入模块,在Python中通过import关键字来导入模块,所以通过import verificationCode导入验证码模块。
路径扩展
模块导入需要注意模块文件和程序文件的路径关系。
同一目录,就是两个文件在同一个文件夹里面。
例如,verificationCode.py和短信验证码在同一个文件夹
.py procedure中,verificationCode.py和短信验证码就是同一目录下的文件。
.py

不同目录,就是两个文件在不同文件夹里面。
例如,短信验证码在文件夹中,在文
.py procedure verificationCode.py件夹module中,那么短信验证码和在不同文件
.py verificationCode.py夹中。

同一个目录导入模块
当模块文件和程序文件在同一个目录中时,直接通过import模块名称就可以导入模块了。

不同目录导入模块
短信验证码.py在文件夹procedure中,verificationCode.py在文件夹module中。procedure和module在同一个文件夹中。

在程序中导入了不在当前目录下的模块,是怎么做到的呢?
通过import sys,os导入了sys和os模块,os让程序知道了模块文件的位置,通过sys可以访问解释器维护的变量和与解释器交互的函数。
sys.path返回的是模块的搜索路径,返回的是一个列表。通过sys.path.append(os.path.realpath("../module"))将要导入的模块添加到搜索路径列表中,让Python解释器能够找到要导入的模块。
"../module"为相对路径,通过../回到上一级目录,再进入module目录。
生成验证码

程序运行结果如下:
您获取的短信验证码是:
通过verificationCode.createCode()调用了verificationCode模块的createCode()函数,生成了新的验证码。
在程序中调用模块中的函数,需要遵循这个格式:模块函数名()。你
.知道为什么要这样写吗?
可以直接写createCode()吗,会发生什么呢?我们一起来试试。
程序运行报错:
NameError:name'createCode'is not defined
通过运行结果,我们看到程序报错,错误原因是createCode没有被定义,程序找不到createCode。
小提醒
通过模块名称导入模块后,需要使用模块名函数名调用模块
import .()
中的函数哟。
直接调用函数名,会提示错误的,因为可能不同的模块中有相
()Python
同的函数名。

除直接使用import来导入模块外,还可以通过模块名函数
from import
名这种方式,请看代码。

依次单击菜单栏File→Save选项,将程序保存为codeTest.py。然后依次单击菜单栏Run→Run Module选项来运行程序,程序运行结果如下:
您获取的短信验证码是:
在程序中,通过from verificationCode import createCode导入模块,这是第二种导入模块的方式。语法为:from模块名函数名。
import
from verificationCode import createCode将createCode()函数导入了当前模块的命名空间中。

这样导入后,在程序中通过createCode()直接调用verificationCode模块的createCode()方法,没有报错。
这是因为from verificationCode import createCode将createCode()函数导入了当前模块的命名空间中。在当前的命名空间中就能找到createCode(),不用再去verificationCode模块的命名空间中寻找,所以这里直接使用createCode()函数不会出错。
对比学习
(1)import verificationCode把verificationCode模块的命名空间导入,还是独立的命名空间,需要使用verificationCode.createCode()的方式来调用模块中的函数。
(2)from verificationCode import createCode将verificationCode模块中的createCode()函数导入当前命名空间,直接使用createCode()就可以调用模块中的函数。