Python:通过函数导入到主命名空间
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python:通过函数导入到主命名空间,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1766字,纯文字阅读大概需要3分钟。
内容图文
![Python:通过函数导入到主命名空间](/upload/InfoBanner/zyjiaocheng/812/a033173bdbde45e68dccf3e74cdff699.jpg)
(重要信息:请参阅下面的更新.)
我正在尝试编写一个函数,import_something,这将是重要的某些模块. (对于这个问题,这并不重要.)问题是,我希望在调用函数的级别导入这些模块.例如:
import_something() # Let's say this imports my_module
my_module.do_stuff() #
这可能吗?
更新:
对不起,我原来的措辞和例子都是误导.我会尝试解释我的整个问题.我所拥有的是一个包,其中包含一些模块和包.在__init__.py中我想导入所有模块和包.所以在程序的其他地方,我导入整个包,并迭代它导入的模块/包.
(为什么?这个包被称为crunchers,在它里面定义了各种各样的cruncher,比如CruncherThread,CruncherProcess,以及未来可能是MicroThreadCruncher.我希望crunchers包自动拥有放在其中的所有crunchers,所以在我使用计算器的程序后期,我知道它可以准确地告诉我已经定义了哪些计算器.)
我知道如果我完全避免使用函数,我可以解决这个问题,并使用for循环等在主级别上执行所有导入.但它很难看,我想看看能不能避免它.
如果还有其他问题,请在评论中提问.
解决方法:
函数能够将某些内容返回到调用它们的位置.它称为返回值:p
def import_something():
# decide what to import
# ...
mod = __import__( something )
return mod
my_module = import_something()
my_module.do_stuff()
好风格,没有麻烦.
关于你的更新,我想在你__init__.py中添加这样的东西会做你想要的:
import os
# make a list of all .py files in the same dir that dont start with _
__all__ = installed = [ name for (name,ext) in ( os.path.splitext(fn) for fn in os.listdir(os.path.dirname(__file__))) if ext=='.py' and not name.startswith('_') ]
for name in installed:
# import them all
__import__( name, globals(), locals())
别的地方:
import crunchers
crunchers.installed # all names
crunchers.cruncherA # actual module object, but you can't use it since you don't know the name when you write the code
# turns out the be pretty much the same as the first solution :p
mycruncher = getattr(crunchers, crunchers.installed[0])
内容总结
以上是互联网集市为您收集整理的Python:通过函数导入到主命名空间全部内容,希望文章能够帮你解决Python:通过函数导入到主命名空间所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。