python可以导入一个模块中的特定函数_为python目录中的每个模块调用特定函数

你没有做任何事情来加载模块,你只是创建和运行空模块。curr_module = imp.new_module(item)

curr_module.run()

从文档中说:imp.new_module(姓名)

返回一个名为name的新空模块对象。此对象未插入sys.modules中。

所以,这实际上和你写的一样:curr_module = types.ModuleType(item)

curr_module.run()

你得到的原因['__ doc __ ', ' __ name __ ', '__ package __ '](虽然我很确定你实际上['__doc__ ', '__name__', '__package__']没有所有这些额外的空间)是这些属性甚至存在于空模块中。

您复制此示例代码的示例代码是尝试执行完全不同的操作。这个问题的重点是如何用一串源代码创建一个模块,而不是正常的方式。你通过创建一个新的空模块来做(在2.x中),然后exec针对该模块的全局变量进行操作。这exec是模块最终没有空的原因,你没有做任何类似的事情。

你也给模块一个无效的名字,Brd1.py而不是Brd1。

如果要实际加载模块,请查看示例:fp, pathname, description = imp.find_module(name)

curr_module = imp.load_module(name, fp, pathname, description)

# …

当然,您不希望通过普通搜索加载它,而是通过路径名加载它。你可以传递一个path参数find_module:name = os.path.splitext(item)[0]

fp, pathname, description = imp.find_module(name, 'boards')

...或者直接加载它:name = os.path.splitext(item)[0]

pathname = os.path.join("boards", item)

desc = [s for s in imp.get_suffixes if s[0] == '.py']

with open(pathname) as f:

curr_module = imp.load_module(name, f, pathname, desc)

您可能还想将模块放入sys.modules。或者你可能不会。(示例没有,因为它模拟了__import__函数的效果。)如果是这样:sys.modules[name] = curr_module

您也可能想要进行sys.modules检查,如示例中所示。如果您进行检查,尝试两次导入同一文件将第二次使用缓存版本,就好像您已经完成了正常操作import; 如果你不这样做,它将类似于调用reload:try:

curr_module = sys.modules[name]

except KeyError:

# the logic above to find and load curr_module

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值