当前位置:  开发笔记 > 编程语言 > 正文

如何使用Python的__import__函数执行"import*from module"的等效操作?

如何解决《如何使用Python的__import__函数执行"import*frommodule"的等效操作?》经验,为你挑选了2个好方法。

给定一个带有模块名称的字符串,如何导入模块中的所有内容,就像调用了:

from module import *

即给定字符串S ="模块",如何得到相当于以下内容:

__import__(S, fromlist="*")

这似乎没有按预期执行(因为它不会导入任何东西).



1> John Milliki..:

请重新考虑.唯一比魔术更糟的import *是. import *

如果你真的想:

m = __import__ (S)
try:
    attrlist = m.__all__
except AttributeError:
    attrlist = dir (m)
for attr in attrlist:
    globals()[attr] = getattr (m, attr)


要迂腐,如果没有__all__,则只导入不以_开头的名称.
是的,绝对没有理由为什么每个设置都应该存在于全局命名空间中,即`options.some_option`明显优于`some_option`.您也可以在特定情况下对模块的差异使用**dict.update()**.

2> 小智..:

这是我为Django动态命名本地设置文件的解决方案.请注意,检查下方的添加不包括导入文件中包含"__"的属性.在__name__全球正在改写本地设置文件的模块名称,这引起setup_environ(),在manage.py使用,有问题.

try:
    import socket
    HOSTNAME = socket.gethostname().replace('.','_')
    # See http://docs.python.org/library/functions.html#__import__
    m = __import__(name="settings_%s" % HOSTNAME, globals=globals(), locals=locals(), fromlist="*")
    try:
        attrlist = m.__all__
    except AttributeError:
        attrlist = dir(m)        
    for attr in [a for a in attrlist if '__' not in a]:
        globals()[attr] = getattr(m, attr)

except ImportError, e:
    sys.stderr.write('Unable to read settings_%s.py\n' % HOSTNAME)
    sys.exit(1)

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有