python - 有没有工具可以检查我从 "wildly"导入模块中使用了哪些名称?

标签 python

我一直在使用 Python 为我的研究进行计算。为了清理我糟糕的代码,我一直在阅读 Code Like a Pythonista: Idiomatic Python大卫古杰着。

在本文中,Goodger 建议不要对表单进行“通配符”导入

from module import *

我的代码使用了很多这些。我想清理我的代码,但我不确定如何清理。我很好奇是否有办法检查我在代码中使用的 module 中的名称。这样我就可以显式导入这些名称或用 module.name 替换这些名称。是否有专为完成此类任务而设计的工具?

最佳答案

使用像 pyflakes 这样的工具(无论如何你都应该使用它)来记录在你用 import 替换 from module import * 之后你的代码中的哪些名称变得未定义模块。一旦您确定了从 module 导入的名称的每个实例,您就可以评估是否要

  1. 对于从 module 导入的 x,始终使用 import modulemodule.x
  2. 如果模块名称很长,则使用import module as mm.x
  3. 使用 from module import x, y, z 选择性地将一些名称从 module 导入到模块命名空间中

以上三者并不互斥;作为一个极端的例子,你可以在同一个模块中使用所有三个:

import really.long.module.name
import really.long.module.name as rlmn
from really.long.module.name import obvious_name

really.long.module.name.foo()  # full module name
rlmn.bar()                     # module alias
obvious_name()                 # imported name

全部在同一个代码中。 (我不推荐在同一个模块中使用所有三个模块。在整个单个模块中坚持使用完整的模块名称​​或别名,但是导入 common 没有坏处,直接使用明显的名称,并使用完全限定名称来表示更晦涩的模块属性。)

关于python - 有没有工具可以检查我从 "wildly"导入模块中使用了哪些名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39403430/

相关文章:

python - Pandas:用于合并两个多索引 DataFrame 的类似 merge_asof 的解决方案?

python - 使用正确的密码解密受 aes-256 位保护的 pdf

python - 如何使用 Boto3 在 AWS 实例上执行命令

python - 将 float 列表四舍五入到下限?

python - 如何迭代 xml 文件,检查 lxml 属性是否存在并将其及其值连接到另一个变量?

python - Python 中的图像锐化错误

python - 编程竞赛,如输入验证器

python - 使用python删除一个文件中存在于另一个文件中的行

从不同文件导入类时,Python 3 是实例意外行为吗?

python - 在球面上均匀分布n个点