繁体   English   中英

模块导入良好实践

[英]Module Importing Good Practice

导入模块的“良好做法”是什么? 例如,如果我有一个名为“module”的模块和一个名为“func”的 function,哪个更可取?

1:

def do_things():
    from module import func
    func()

2:

from module import func

def do_things():
    func()

3:

import module as mod

def do_things():
    mod.func()

4:

def do_things():
    import module as mod
    mod.func()

我需要确保我的代码为这个项目编写得很好。 同样从模块中导入类(例如“from bs4 import BeautifulSoup”)是否可以将它们导入我程序顶部的全局命名空间? 如果不是,是否适用与此处相同的规则?

从性能的角度来看, importimport from 是完全一样的 解释器会将整个模块加载到 memory 中。

这让你有一个选择:用哪种方式来做。 我将 go 与使代码更具可读性和不那么含糊的一个:

  • 导入模块(无论是否别名)使用命名空间方法,这将避免两个模块具有同名的 function 的情况。
  • 仅导入您需要的功能可能会为您的开发人员节省认知负担。

更新:关于本地进口,请参阅此答案。 Python 将与本地或文件顶部的导入一起使用。 本地导入可以使您免于循环依赖。 更好的设计也可以帮助您。

你必须选择你自己的毒药,这都是关于权衡的。

这个答案写在我看来:

对我来说,我更喜欢#3,我的理由是:

  1. from module import func不同,您可以在该模块中使用任何 function 而无需显式导入它。
  2. 减少全局命名空间混乱(而不是from module import func1, func2, fun3你可以import module as mod然后mod.func1()
  3. 在顶部导入意味着它可以在任何脚本中使用(如果以后需要在另一个 function 中使用它,这样做更容易)。

对于导入单个 class,如果这是您对该模块执行的唯一操作,我会发现没问题,但我的第 1 点可以适用于此,如果该模块还具有辅助函数和/或其他类,则导入可能会更好然后模块执行module.Class()

在寻找最佳实践时,PEP8 通常是第一个寻找的地方。 根据PEP8,它是#2: https://www.python.org/dev/peps/pep-0008/#imports

我也喜欢#3,但仅在某些情况下:

  • 如果是广泛使用的 package,如果经常缩写(例如import numpy as np
  • 如果您要导入的包/函数的名称很长(例如import a_ridiculously_long_module_name as short_nameimport module.submodule.subsubmodule as short_name module.submodule.subsubmodule as short_name )

对未知包使用别名的危险在于,缩写可能对您有意义,但对其他人没有意义。 这可能会妨碍代码的可读性。

您还可以组合别名和绝对导入。 所以选项5是:

from module import function as func

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM