首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从模块导入所有东西,只有几种方法除外

从模块导入所有东西,只有几种方法除外
EN

Stack Overflow用户
提问于 2013-11-13 15:25:25
回答 3查看 12.3K关注 0票数 15

除了一些显式指定的方法之外,是否可以从现有的import模块中获取所有东西(*)?

(背景:与推荐的Python实践相反,在FEniCS中,做from dolfin import *是很常见的。但是,一些方法名称包含字符串"Test“(例如,TestFunction()),被鼻子误认为是单元测试。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-13 15:38:02

如果您没有对模块的访问权限,还可以简单地从全局命名空间中删除这些方法或变量。以下是如何做到这一点:

代码语言:javascript
运行
复制
to_exclude = ['foo']

from somemodule import *

for name in to_exclude:
    del globals()[name]
票数 18
EN

Stack Overflow用户

发布于 2013-11-13 15:28:20

是的,您可以使用__all__模块

添加

代码语言:javascript
运行
复制
__all__ = ["echo", "surround", "reverse"] #Or whatever your module names are

到具有这些模块的文件,或者要导入的包的__init__.py

现在

代码语言:javascript
运行
复制
from module import * 

只导入__all__中指定的模块

票数 12
EN

Stack Overflow用户

发布于 2021-09-30 04:40:59

@Alexander-朱可夫的解决方案大部分时间都能工作,但当导入的模块碰巧包含一个名为globals的变量时,就不会起作用了。

例如,

代码语言:javascript
运行
复制
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

以下解决方案将适用于烧瓶和其他:

代码语言:javascript
运行
复制
to_exclude = ['abort']
from flask import *
for name in to_exclude:
    __builtins__.globals().pop(name)

不管多么可笑,如果您打开Python控制台并手动输入命令,它就无法工作。我认为这是Python3的一个缺陷。如果您想让它在Python控制台中工作,那么必须显式导入builtins模块:

代码语言:javascript
运行
复制
import builtins
to_exclude = ['abort']
from flask import *
for name in to_exclude:
    builtins.globals().pop(name)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19957657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档