2

我想听听关于这个问题的意见:之后有很多代码是不是一个坏主意

if __name__ == '__main__':

我问这个的原因是,我当前的项目有大约 40000 行代码,并且随着它的增长,我不断在上述语句之后添加行。所以这个程序预计会有大约 3000 行代码,我担心在这个语句之后我会有太多的代码。所以问题是“在这条语句之后编写大量代码是一种好的 Python 方式吗?”

4

3 回答 3

5

一个简单的替代方法是将您的主要代码添加到一个函数中,然后在检查main()后简单地调用它。__name__这样,你得到:

  • __name__支票的好处
  • 功能的好处(可能可重用或不可重用)
  • 内省的好处(例如,如果您需要它,很容易自动分析模块的“主要”代码是什么——它只是main函数!)。

一个例子:

def main():
    # Be awesome here.

if __name__ == '__main__':
    main()  # or sys.exit(main()), if you want to return an exit code
于 2012-12-18T19:37:18.927 回答
1

如果你想重用你的代码,你不应该在之后保留它if __name__ == '__main__'(将它用于函数/类/模块,并从程序的这一部分进行最简单的调用)。让我在这里提一下 Python 之禅(在你的情况下至少有两点):

稀疏比密集好。

可读性很重要。

于 2012-12-18T19:37:25.083 回答
1

听起来这里有两个不同的观点:

  • 在所有其他条件相同的情况下,最好定义封装由 400 行命令式代码表示的行为的函数,以提高可读性、可测试性、可维护性(可能还有“-ability”的一些其他值)。

  • 由 限定的代码__name__ == '__main__'仅在直接调用文件执行,而不是作为模块包含在import. 所以,像这样的文件

    def be_awesome():
        pass
    
    
    if __name__ == '__main__':
       def be_more_awesome():
            pass
    

be_more_awesome只有在作为源参数提供给 python 调用时才会有定义,而不是在导入时。__name__因此,作为一般规则,将仅当文件作为脚本直接运行时才应运行的代码准确地放在测试之后是合适的。问自己这些问题

  • “如果我在另一个文件中导入这个模块,这段代码运行会不会很糟糕?”
  • “我直接调用这个文件时需要调用这段代码吗?” (就像封装 400 行的假设main函数一样)

如果其中任何一个问题的答案是“是”,则它(可能)属于__name__测试之后;如果不是,它(可能)不会。

于 2012-12-18T20:32:45.650 回答