擅长:python、mysql、java
<p>这里有一个更简单的解决方案。它使用ast模块将代码从文件中剥离出来,然后将其与inspect模块找到的可用函数列表进行比较。只需在运行之前替换yourfilename和yourmodulename。在</p>
<pre><code>import ast, inspect, yourmodulename as mymodule
filename='yourfilename.py'
tab = ' '*4
funcs = {m[0] for m in inspect.getmembers(mymodule)
if str(m[1])[1:].split(' ')[0] in ('function', 'class') and
inspect.getmodule(m[1]) == mymodule}
with open(filename) as f:
code = ast.parse(f.read())
words = {node.id for node in ast.walk(code) if isinstance(node, ast.Name)}
print('from', mymodule.__name__, 'import (')
out = tab
for word in (', '.join((sorted(words & funcs)))+')').split():
if len(out + word) > 80:
print(out.rstrip())
out = tab + word + ' '
else:
out += word + ' '
if out:
print(out.rstrip())
</code></pre>
<p>我的脚本和我的脚本检查了几十行。在</p>
<p>Edit:添加了检查,以确保它只列出实际属于所需模块一部分的函数,而不是它的子模块。另外,修改后使其同时列出要导入的类和函数。在</p>