![Python程序设计:人工智能案例实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/423/39980423/b_39980423.jpg)
上QQ阅读APP看书,第一时间看更新
4.14 import
:深入讨论
如果已经使用下面的语句导入了模块(例如math
和random
模块):
import module_name
就可以通过每个模块的名称和一个点(.
)访问包含在模块中的函数。如果使用下面的代码从模块中导入特定的标识符(例如decimal
模块的Decimal
类型):
from module_name import identifier
则可以直接使用该标识符,而不必在其前面加上模块名称和点(.
)。
从一个模块导入多个标识符
使用from...import
语句,可以从模块中导入以逗号分隔的标识符列表,然后在代码中直接使用它们,而不必在它们之前添加模块名和点(.
):
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/105-4.jpg?sign=1739218446-ASVfiasBPQUJ4esYB3nd2g18DtXwTMjN-0-6822d215baede5b4dea19cf8ea63713d)
尝试使用未导入的函数会引发NameError
,表示名称未定义。
警告:避免使用通配符
可以使用通配符导入模块中定义的所有标识符,如下所示:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/105-5.jpg?sign=1739218446-oBUtzPscw8oX51YW4oUW1MSxkw4ZK7Au-0-7bf8e80a3c0e759b93c191a5fb5986eb)
这将使模块内所有的标识符都可以在这段代码中使用。但是,使用通配符导入模块的标识符可能会导致不易察觉的错误,这种做法比较危险,应尽量避免。例如下面的代码段:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/106-1.jpg?sign=1739218446-MGlKakixBFiSGvPYLzLZWKHKqkKdZzvw-0-a147b13b771d32f358a54dc68f3781ee)
代码段[4]
将字符串'hello'
赋值给名为e
的变量。在执行代码段[5]
之后,变量e
可能被意外地替换为数学模块中的常数e
,表示数学浮点值e
。
绑定模块与模块标识符的名称
有时使用缩写来代表导入的模块可以简化程序代码。import
语句的as
子句允许指定用于引用模块的标识符名称。例如,3.14节中的代码可以按照下面的代码所示的方式导入statistics
模块并访问其mean
函数:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/106-2.jpg?sign=1739218446-mh0rKN3ZcL70juH8SCxQTnjPF2QpWDKZ-0-76cc4c5e5d0c870f5ed1261f6ae7b1f2)
语句import...as
通常用于导入带有方便简写的Python库,比如将statistics
模块简写为stats
,再比如使用numpy
模块时通常会以下面的方式将其导入:
import numpy as np
库文档中一般会介绍常用的简写名称。
在导入模块时,应使用import
或import...as
语句,然后分别通过模块名称或as
关键字后面的简写来访问模块。这样做可以确保不会意外导入与代码中的标识符相冲突的标识符。