Python 设计:代码在“后”;如果“名称”==“主名称”;测试

Python 设计:代码在“后”;如果“名称”==“主名称”;测试,python,Python,我想听听大家对这个问题的看法:以后有很多代码是个坏主意吗 如果 我问这个问题的原因是,我当前的项目有大约400行代码,随着它的增长,我会在上面的语句之后不断添加行。所以这个程序预计会有3000行代码,我担心在这个语句之后会有太多的代码。因此,问题是“在这个语句之后编写大量代码是一种好的Python方式吗?”一个简单的替代方法是将主代码添加到main()函数中,然后在\uu name\uu检查后调用它。这样,您就可以: \uuuu name\uuuu检查的好处 功能的好处(可重用或不可重用) 内

我想听听大家对这个问题的看法:以后有很多代码是个坏主意吗

如果


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

一个简单的替代方法是将主代码添加到
main()
函数中,然后在
\uu name\uu
检查后调用它。这样,您就可以:

  • \uuuu name\uuuu
    检查的好处
  • 功能的好处(可重用或不可重用)
  • 内省的好处(例如,如果您需要它,可以很容易地自动分析模块的“主”代码是什么-它只是
    main
    函数!)
例如:

def main():
    # Be awesome here.

if __name__ == '__main__':
    main()  # or sys.exit(main()), if you want to return an exit code

如果你想重用你的代码,你不应该把它放在
之后,如果uuuu name uuuu=='\uuuuuu main uuu'
(对函数/类/模块使用它,并使程序的这一部分可以进行最简单的调用)。让我在这里提到Python的禅宗(在您的案例中,至少有两点很重要):

稀疏比密集好

可读性很重要


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

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

  • 只有在直接调用文件时才执行由\uuuuu name\uuu='\uuu main\uuu'限定的代码,而不是作为模块包含在导入中。所以,像这样的文件

    def be_awesome():
        pass
    
    
    if __name__ == '__main__':
       def be_more_awesome():
            pass
    
只有在作为python调用的源参数提供时,而不是在导入时,才会有
be\u more\u awesome
的定义。一般来说,在
\uuuu name\uuuuu
后面加上测试代码是合适的,只有当文件作为脚本直接运行时,才应该运行这些代码。问问自己这些问题

  • “如果我将此模块导入到另一个文件中,此代码运行是否不好?”
  • “当我直接调用此文件时,是否需要调用此代码?”(与封装400行的假设
    main
    函数的情况相同)

如果这些问题的答案是“是”,那么它(可能)属于
\uuu name\uuuu
测试之后;如果没有,它(可能)没有。

非常感谢,我会按照你的建议来做。非常感谢你的回答。我认为
\uuuuuu main\uuuuu
的目的是如果你写的是一个库文件而不是应用程序入口点。导入您编写的.py文件时,
\uuuu name\uuuu!='__main_'
和if语句下的任何内容都将被忽略。如果你在一个文件中编写整个应用程序,你真的需要检查吗?