栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用`import __main__`是一个好习惯吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用`import __main__`是一个好习惯吗?

我认为可能有两个主要原因(哈哈),一个可能规定避免这种模式。

  • 它混淆了您要导入的变量的来源。
  • 如果您的程序有多个入口点,它将中断(或至少很难维护)。想象一下,如果有人(很可能是您)想要将功能的某些子集提取到一个独立的库中,他们将不得不删除或重新定义这些孤立的引用中的每个引用,以使其在您的应用程序之外可用。

如果您完全控制该应用程序,并且永远不会再有其他入口点或功能的其他用途,并且您确定自己不介意模棱两可,那么我认为模式错误是没有 客观 原因的

from__main__ import foo
。我个人不喜欢它,但是再次,基本上是出于上述两个原因。


我认为,更健壮/对开发人员友好的解决方案可能是这样的,它创建了一个专门用于保存这些超全局变量的特殊模块。然后,您可以导入模块并

module.VAR
在需要设置时参考。本质上,只需创建一个特殊的模块命名空间即可在其中存储超全局运行时配置。

# conf.py (for example)# This module holds all the "super-global" stuff.def init(args):    global DEBUG    DEBUG = '--debug' in args    # set up other global vars here.

然后,您将更像这样使用它:

# main.pyimport confimport appif __name__ == '__main__':    import sys    conf.init(sys.argv[1:])    app.run()

# app.pyimport confdef run():    if conf.DEBUG:        print('debug is on')

请注意使用

conf.DEBUG
而不是
from conf import DEBUG
。这种构造意味着您 可以
在程序的生命周期内更改变量,并将更改反映到其他地方(显然,假设单个线程/进程)。


另一个好处是,这是一种相当普遍的模式,因此其他开发人员将很容易认识到它。尽管我避免使用该特定名称,因为它通常是一堆静态对象,而不是运行时参数的命名空间,但它很容易与

settings.py
各种流行应用程序(例如
django
)使用的文件进行比较
settings.py
。例如,上述配置名称空间模块的其他好名字可能是
runtime
params



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/617732.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号