是否将__name__ ==“__ main__”语句用于入口点pythonic以外的目的?

时间:2016-12-23 23:44:50

标签: python main

这是一个python脚本,它将输出发送到不同的位置,具体取决于它是以交互方式运行还是作为模块导入。

# main.py
def main():
    output = "... do some processing ..."
    if __name__ == "__main__":
        print("sending output to stdout")
        #print(output)
    else:
        print("sending output to file")
        #write_to_file(output)

if __name__ == "__main__":
    main()

根据脚本的调用方式运行不同的路径:

$ python main.py
sending output to stdout

$ python
>>> import main
>>> main.main()
sending output to file

代码按预期工作,但我觉得它可能是代码味道。我可以看到为什么单个脚本中的多个检查都是好的和坏的原因,我正在寻找关于这是否是pythonic的反馈。

可能是pythonic的原因

  1. 其他语言中有使用类似结构的先例(如c ++中的#ifdef DEBUG
  2. 此方法不会在main()的参数列表中引入另一个变量(参见缺点下的#3)。
  3. 为什么它可能是unpythonic

    1. 我没有在生产代码或任何代码示例中看到多个if __name__ == "__main__":语句(尽管我的搜索并不详尽。)
    2. python 3 documentation for __main__不包含任何宣传此编码风格的示例。它只是提到它的常用方式。从文档中排除并不意味着它很糟糕,只是风格并不常见。
    3. 通过将诸如output="file"之类的参数传递给main()
    4. ,可以实现相同的目标,可能会减少对新python开发人员的困惑。

      我希望这个问题对于SO来说不是太基于意见。如果您愿意,请随意引用Python的Zen来支持您的答案。我期待着您的反馈。

0 个答案:

没有答案