1.3.2 from ... import

导入函数还有另一种方法。例如,你可能希望访问NumPy中的所有函数,但又不想在函数前面输入“numpy.”前缀。不妨尝试以下命令:

from numpy import *
sqrt(2)

这很方便,但如果你想同时使用两个不同的模块,这可能会导致麻烦。有一个名为math的模块,它也有一个sqrt函数。如果同时从mathnumpy导入所有函数,那么在输入sqrt(2)时会调用哪个模块的函数?这在处理数字数组时很重要。为了保持直观,最好不要使用“from 模块名import *”命令,而是导入模块,并根据需要显式调用numpy.sqrtmath.sqrt。不过,这里还有一个折中的方案:你可以给模块取别名。尝试以下命令:

import numpy as np
np.sqrt(2)

如此一来,当不同的模块具有相同名称的函数时,我们既可以节省输入,又可以避免混淆。

在某些情况下,你可能只需要一个特定的函数,而不需要整个函数库。你可以通过函数名称导入特定的函数:

from numpy import sqrt, exp
sqrt(2)
exp(3)

我们只导入了NumPy模块中的两个函数,无须使用“numpy.”前缀即可访问这些函数。请注意,这里的导入命令和“from numpy import *”命令很相似。星号是一个“通配符”,它告诉导入命令需要获取所有内容。

稍微改变一下导入语句,你就可以为导入的函数提供自定义别名:

from numpy.random import random as rand
rand()

现在,我们有了一个随机数生成器,它有一个很方便输入的别名:rand

该示例还展示了模块中还有模块的现象:numpy模块包含numpy.random模块,而numpy.random模块又包含numpy.random.random函数。当我们输入import numpy时,我们导入了许多这样的子模块。当然,我们也可以只导入一个函数,方法是使用from,并提供目标函数的准确名称、目标函数所在的模块,以及目标函数的别名。