我正在重构并消除一些相当单一的代码上的通配符导入。
Pylint似乎在列出通配符导入所带来的所有未使用的导入方面做得很好,但我希望它能提供一个使用过的导入列表,这样我就可以快速替换通配符导入。有什么快速的方法吗?我即将解析pyLint的输出并对此进行set.difference()
以及导入模块的dir()
。但我敢打赌,我不知道有一些工具/程序。
答案 0 :(得分:5)
注意:pylint不推荐一组使用过的导入。更改此设置时,您必须了解导入正在修改的代码的其他模块,这些模块可能只使用属于您要重构的模块的命名空间的符号,因为您有未使用的导入。
我建议使用以下过程重构from foo import *
:
在交互式shell中,键入:
import re
import foo as module # XXX use the correct module name here!
module_name = module.__name__
import_line = 'from %s import (%%s)' % module_name
length = len(import_line) - 3
print import_line % (',\n' + length * ' ').join([a for a in dir(module)
if not re.match('__.*[^_]{2}', a)])
将from foo import *
行替换为上面打印的
重复from bar import *
答案 1 :(得分:3)
这是露水卡,这是一个基于亚历克斯最初想法的非常简单的工具:
答案 2 :(得分:0)
这是一个古老的问题,但是我写了一些基于autoflake的功能。
参见此处:https://github.com/fake-name/autoflake/blob/master/autostar.py
它的作用与dewildcard相反,因为它试图完全限定通配符项目的所有用途。
例如
from os.path import *
已转换为
import os.path
os.path.<func>
的所有使用都带有适当的功能。