除了一些显式指定的方法之外,是否可以从现有的import模块中获取所有东西(*)?
(背景:与推荐的Python实践相反,在FEniCS中,做from dolfin import *是很常见的。但是,一些方法名称包含字符串"Test“(例如,TestFunction()),被鼻子误认为是单元测试。
发布于 2013-11-13 15:38:02
如果您没有对模块的访问权限,还可以简单地从全局命名空间中删除这些方法或变量。以下是如何做到这一点:
to_exclude = ['foo']
from somemodule import *
for name in to_exclude:
del globals()[name]发布于 2013-11-13 15:28:20
是的,您可以使用__all__模块
添加
__all__ = ["echo", "surround", "reverse"] #Or whatever your module names are到具有这些模块的文件,或者要导入的包的__init__.py。
现在
from module import * 只导入__all__中指定的模块
发布于 2021-09-30 04:40:59
@Alexander-朱可夫的解决方案大部分时间都能工作,但当导入的模块碰巧包含一个名为globals的变量时,就不会起作用了。
例如,
to_exclude = ['abort']
from flask import *
for name in to_exclude:
del globals()[name]
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: 'module' object is not callable错误是因为flask包包含一个名为globals (不能调用)的名称空间,它将覆盖当前的全局符号globals。
以下解决方案将适用于烧瓶和其他:
to_exclude = ['abort']
from flask import *
for name in to_exclude:
__builtins__.globals().pop(name)不管多么可笑,如果您打开Python控制台并手动输入命令,它就无法工作。我认为这是Python3的一个缺陷。如果您想让它在Python控制台中工作,那么必须显式导入builtins模块:
import builtins
to_exclude = ['abort']
from flask import *
for name in to_exclude:
builtins.globals().pop(name)https://stackoverflow.com/questions/19957657
复制相似问题