python - 将 python 模块导入例程或类定义有什么问题吗?

标签 python import module instance

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 是否会导致冲突?

有效率成本吗?

是否有更好/更常见的替代方案来测试 figmatplotlib.figure.Figure 的一个实例;不需要导入模块的替代方案?

最佳答案

导入内部函数和类没有任何问题 - 例如,这是处理相互递归导入(其中两个文件各自导入另一个文件)的有用方法。

但是,检查参数类型有问题。惯用的 python 不会检查Fig 的类型。相反,只要滥用就失败。这是因为你正在破坏“鸭子打字”——人们无法使用“像”无花果一样工作的对象来调用你的例程,即使他们想这样做(一个明显的例子是测试模拟;另一个例子是有人编写了 matplotlib 的替代品,它具有相同的 API,但看起来或工作得更好)。

因此,对于您那里的代码,根本没有必要进行导入。只需使用fig

更一般地说,导入在第一次使用时会被缓存,因此您通常不需要太担心效率(我并不是说它是完美的,但这是您在担心之前需要分析的事情)。

关于python - 将 python 模块导入例程或类定义有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7083843/

相关文章:

python - 为什么按下 PyQt 按钮时 matplotlib 的计时器会加速?

python - 在 python pickle 文件中保留 numpy strides

python - 自动导入不遵循 PEP8

import - 是否可以使用 @import 在 sass 中导入整个目录?

php - 如何让 Zend Framework 使用 'module specific' 配置?

python - 查找两个嵌套列表的交集?

python - 具有多个参数的 Bash 脚本

typescript - 导入 TypeScript 命名空间(如在 C#/.NET 中)

android - 如何通过链接引用将模块导入到android studio中?

excel - 从另一个模块调用一个模块时出现问题