Python内部如何区分“从模块导入功能”之间的“包导入模块”

时间:2018-03-26 12:36:28

标签: python import python-internals

如果我理解正确,可以用两种方式使用python语法const afterSlash = str => str.substr(str.lastIndexOf('/') + 1); const unique = (obj, i, arr) => arr.lastIndexOf(obj) === i; function prune(...valid) { return str => str.split(', ') .map(afterSlash) .filter(unique) .filter(obj => valid.includes(obj)); } const list = "application/pdf, application/x-pdf, application/acrobat, applications/vnd.pdf, text/pdf, text/x-pdf, application/ppt, application/vnd.ms-powerpoint"; const simplify = prune("pdf", "ppt"); const result = simplify(list);

    来自package-name import module-name 的
  1. 来自module-name import function-name
  2. 我想了解一下Python 内部如何处理这两种不同的形式。例如,想象一下,解释器得到“来自A导入B”,解释器是否实际上试图确定A是否是包名/模块名,还是内部将包和模块视为同一类对象(像Linux一样对待文件和目录非常相似)?

1 个答案:

答案 0 :(得分:-1)

首先,模块是一个包含类和函数的python文件。当你说来自一个导入B python在标准的python库中搜索A(一个模块),然后导入B(函数或类),如果它找到A则是模块。如果它没有,它就会消失在存储包的目录中开始搜索并搜索包名(A),然后如果找到它,则导入模块名称(B)。如果它在过去的2个进程中失败,则返回错误。

希望这有帮助。