【问题标题】:python from package import module, any problem with this?来自包导入模块的python,这有什么问题吗?
【发布时间】:2021-11-20 10:23:30
【问题描述】:

在我的 python 代码中,我使用了“from packageA import moduleA”。我的主管评论说这是非常危险的。他说正确的做法是“import packageA.moduleA as moduleA”。

有没有cmets?这真的很危险吗?还是更像是一种常见的做法?

【问题讨论】:

  • 你的主管很迷信。
  • from packageA.moduleA import *有时会出现问题,导致不同平台的命名规则不同。所以Python只会执行packageA和moduleA目录下的__init__.py文件。但是,import packageA.moduleA 就可以了,导入packageA.moduleA 下的所有模块

标签: python import module package


【解决方案1】:

我认为import 的使用取决于项目,因为在某些情况下您可以从模块/包中导入。

来自 python 文档:

: 可以包含子模块或递归子包的 Python 模块。从技术上讲,包是具有 path 属性的 Python 模块。

模块: 作为 Python 代码的组织单元的对象。模块有一个包含任意 Python 对象的命名空间。模块通过导入过程加载到 Python 中。

https://docs.python.org/3/reference/import.html

所以我是这样看的:

当您从模块(例如 from math import pi)导入变量时,您的导入 from packageA import moduleA 更合适。

我怀疑您正在尝试从包中导入(考虑到包包含子模块,您需要正确调用它们以获取子模块的正确路径并在需要的地方调用)。 例如,假设您的包名称为 World,其中包含此层次结构中的以下文件(子模块)Europe\Spain,导入将是 from World.Europe import Spain

【讨论】:

    【解决方案2】:

    我并不是真正在这个行业工作,把编程作为一种爱好,所以我没有资格谈论专业性,但我个人认为from A import B绝对没有问题,除了它可能会创造一个事实在您的代码中引用 B 时有点混乱,例如:

    from math import pi
    
    print(pi)
    

    对比:

    import math
    
    print(math.pi)
    

    第二个版本更容易理解pi 的来源。这也很有用,因为在您要导入的多个库中可能存在同名的函数/方法。一个这样的例子是 Python 中的 htmlglob 库中的 escape() 函数。

    from html import escape
    from glob import escape
    
    print(help(escape))
    

    上面的代码将打印出glob 库的escape() 函数,因为它是最近从那里导入的。

    import html
    import glob
    
    print(help(html.escape))
    print(help(glob.escape))
    

    上面的代码区分了你使用的是哪一个。

    这也可以:

    from html import escape as h_escape
    from glob import escape as g_escape
    
    print(help(h_escape))
    print(help(g_escape))
    

    上面的代码也区分了这两件事。但是,我又不是行业专家,所以我对它的需求一无所知;但就我个人而言,我自己认为没有任何问题。

    附:我从这里得到了所有这些:5 Common Python Mistakes and How to Fix Them - Corey Schafer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 2011-10-28
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      相关资源
      最近更新 更多