了解python的主要方法

这个问题在这里已经有了答案:

  • 如果__name__ ==“__main__”:做什么? 23个答案

  • 对于“主要”的Python方法几乎是独特的语言(*)。

    语义有点微妙。 __name__标识符在导入时绑定到任何模块的名称。 然而,正在执行的文件,然后当__name__被设置为"__main__" (文字串: __main__ )。

    这几乎总是用于将应该执行的代码部分与定义功能的代码部分分开。 所以Python代码通常包含如下一行:

    #!/usr/bin/env python
    from __future__ import print_function
    import this, that, other, stuff
    class SomeObject(object):
        pass
    
    def some_function(*args,**kwargs):
        pass
    
    if __name__ == '__main__':
        print("This only executes when %s is executed rather than imported" % __file__)
    

    使用这种约定,可以有一个文件定义用于其他程序的类和函数,并且还包括仅当该文件作为独立脚本被调用时才评估的代码。

    理解if __name__上面的所有代码在两种情况下都会被执行和评估,这一点很重要。 解释器在导入文件或执行文件时对其进行评估。 如果您在if __name__行之前放置print语句, if __name__其他代码尝试将其作为模块导入时,它都会打印输出。 (当然,这将是反社会的,不要这样做)。

    我个人喜欢这些语义。 它鼓励程序员将功能(定义)与功能(执行)分开,并鼓励重用。

    理想情况下,如果从命令行调用,几乎每个Python模块都可以做一些有用的事情。 在很多情况下,这用于管理单元测试。 如果一个特定的文件定义了只在系统的其他组件上下文中有用的功能,那么仍然可以使用__name__ == "__main__"来隔离调用适用于该模块的单元测试套件的代码块。

    (如果你不打算有任何这样的功能和单元测试,而不是确保文件模式不可执行)。

    总结: if __name__ == '__main__':有两个主要用例:

  • 允许模块提供用于导入到其他代码的功能,同时还提供有用的语义作为独立脚本(围绕功能的命令行包装)
  • 允许模块定义一组单元测试,这些单元测试存储在(要在同一个文件中)要测试的代码,并且可以独立于代码库的其余部分执行。
  • def main(*args)if __name__ == '__main__':相当常见main(*sys.argv[1:])如果你想以类似于其他编程语言的方式定义main,只需调用main(*sys.argv[1:])即可。 如果.py文件主要用作其他代码中的模块,那么您可以在if __name__ == '__main__:'套件中def test_module()并调用test_module()

  • if __file__ == $0 Ruby也实现了类似的功能)。

  • 在Python中,执行不必从main开始。 首先执行“可执行代码”的第一行。

    def main():
        print("main code")
    
    def meth1():
        print("meth1")
    
    meth1()
    if __name__ == "__main__":main() ## with if
    

    输出 -

    meth1
    main code
    

    更多关于main() - http://ibiblio.org/g2swap/byteofpython/read/module-name.html

    模块的__name__

    每个模块都有一个名称,模块中的语句可以找出其模块的名称。 这在特定情况下尤其方便 - 如前所述,首次导入模块时,该模块中的主模块将运行。 如果我们只在程序本身被使用而不是从另一个模块导入时才运行该程序块,该怎么办? 这可以使用模块的name属性来实现。

    使用模块的__name__

    #!/usr/bin/python
    # Filename: using_name.py
    
    if __name__ == '__main__':
        print 'This program is being run by itself'
    else:
        print 'I am being imported from another module'
    

    输出 -

    $ python using_name.py
    This program is being run by itself
    $ python
    >>> import using_name
    I am being imported from another module
    >>>
    

    怎么运行的 -

    每个Python模块都定义了__name__ ,如果这是__main__ ,则表示该模块正在被用户单独运行,并且我们可以执行相应的适当操作。


    Python没有像Java,C,C ++等定义的入口点,而只是逐行执行源文件。 if语句允许您创建一个main函数,如果您的文件作为“主”模块加载而不是作为另一个模块中的库加载,则会执行该函数。

    链接地址: http://www.djcxy.com/p/9309.html

    上一篇: Understanding the main method of python

    下一篇: Why use def main()?