导入Axes3D会改变add_subplot的行为方式 - 这是一种命名空间违规吗?
- 论坛
- 导入Axes3D会改变add_subplot的行为方式 - 这是一种命名空间违规吗?
6 浏览
导入Axes3D会改变add_subplot的行为方式 - 这是一种命名空间违规吗?
这一直是我困惑的一个问题:导入Axes3D
(这只是我们这里使用的某种Python对象)似乎会改变一个不相关的函数add_subplot
,而该函数来自另一个模块。这是怎么发生的?这难道不违背了命名空间的整个理念吗?\n我的意思是:\n
>>> import matplotlib.pyplot as plt >>> f = plt.figure() >>> ax = f.add_subplot(111, projection='3d') # 失败,报错:ValueError: Unknown projection '3d' >>> from mpl_toolkits.mplot3d import Axes3D >>> ax = f.add_subplot(111, projection='3d') # 成功!
\n起初,我以为这和from __future__ import print_function
类似,后者在命名空间中神奇地引入了一个名为print
的函数。但是,正如事实证明的那样,那确实是一种魔法,而且只适用于__future__
模块。\n那么,Axes3D
是如何工作的呢?