【问题标题】:I have a list of files, I want to iterate and import functions from those files, so as to work on them one by one, python我有一个文件列表,我想从这些文件中迭代和导入函数,以便一一处理它们,python
【发布时间】:2016-09-04 20:46:09
【问题描述】:

我有一个文件列表,在 python from filename import * 中使用命令,适用于单个文件,因为我给出了文件的确切名称,但如果我想将其用作 from list[i] import * 来遍历列表并一个接一个地从文件中导入功能来处理它,它不起作用?我应该进行哪些更改才能将其用于文件列表,以便我可以轻松迭代?

【问题讨论】:

  • 使用eval 将字符串评估为命令
  • 没有。 eval 不应该被建议作为解决方案。 nedbatchelder.com/blog/201206/eval_really_is_dangerous.html
  • 无论您打算如何处理,请记住 Style Guide for Python Code 关于导入的内容:“应避免通配符导入 (from <module> import *),因为它们会导致不清楚哪些名称出现在命名空间,使读者和许多自动化工具都感到困惑。”
  • @NickA 如果您打算尝试使用eval 来证明其合理性,那么您应该认真考虑一下您的设计方法。此外,还有literal_eval。真的不应该有机会为eval辩护。
  • @NickA 如果您以前没有使用过语言功能,您可能希望推迟向某人推荐它,直到您意识到它的优点和缺点。像这样无知的吐槽会延续使用eval等不良做法

标签: python file file-handling


【解决方案1】:

为此使用importlib

from importlib import import_module

module_list = [import_module("test.mod{}".format(i)) for i in range(20)]

# OR

module_list = []
for i in range(20):
    module_list.append(import_module("test.mod{}".format(i)))

documentation 所述,请勿使用__import__ 等内部事物

【讨论】:

    【解决方案2】:

    如果您正在寻找动态导入,您正在寻找 __import__ 函数。

    for modl in ('foo', 'bar', 'baz', 'bat',):
        __import__('parent.' + modl)
    

    【讨论】:

      猜你喜欢
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2021-08-20
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多