Possible Duplicate:
Should Python import statements always be at the top of a module?
我最近回答了SO question并提供此例程作为解决方案:
def set_fontsize(fig,fontsize):
import matplotlib
"""
For each text object of a figure fig, set the font size to fontsize
"""
if not isinstance(fig,matplotlib.figure.Figure):
raise Exception("fig is not a matplotlib.figure.Figure")
for textobj in fig.findobj(match=matplotlib.text.Text):
textobj.set_fontsize(fontsize)
我导入了matplotlib
进入 set_fontsize(fig,fontsize)
的定义因为不能保证使用此例程的人会在更全局的范围内导入 matplotlib (更好的术语?)。特别是因为许多 matplotlib 示例使用此导入调用例程:import matplotlib.pyplot as plt
.
导入 matplotlib 是否会导致冲突?
有效率成本吗?
是否有更好/更常见的替代方案来测试 fig
是 matplotlib.figure.Figure
的一个实例;不需要导入模块的替代方案?
最佳答案
导入内部函数和类没有任何问题 - 例如,这是处理相互递归导入(其中两个文件各自导入另一个文件)的有用方法。
但是,检查参数类型有问题。惯用的 python 不会检查Fig 的类型。相反,只要滥用就失败。这是因为你正在破坏“鸭子打字”——人们无法使用“像”无花果一样工作的对象来调用你的例程,即使他们想这样做(一个明显的例子是测试模拟;另一个例子是有人编写了 matplotlib 的替代品,它具有相同的 API,但看起来或工作得更好)。
因此,对于您那里的代码,根本没有必要进行导入。只需使用fig
。
更一般地说,导入在第一次使用时会被缓存,因此您通常不需要太担心效率(我并不是说它是完美的,但这是您在担心之前需要分析的事情)。
关于python - 将 python 模块导入例程或类定义有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7083843/