Python:如果__name__ =='__ main__',导入并初始化Argparse?

Dan*_*iel 32 python scripting

如果我if __name__ == '__main__'在脚本中使用argparse和测试我也想用作模块,我应该在该测试下导入argparse然后初始化它吗?我没有发现在脚本中使用argparse提到的样式指南,并且许多argparse脚本示例不使用'if name'测试或以不同方式使用它.这是我到目前为止所做的事情:

#! /usr/bin/env python

def main(name):
    print('Hello, %s!' % name)

if __name__ == '__main__':
    import argparse
    parser = argparse.ArgumentParser(description = 'Say hello')
    parser.add_argument('name', help='your name, enter it')
    args = parser.parse_args()

    main(args.name)
Run Code Online (Sandbox Code Playgroud)

我应该使用顶部的其他模块导入argparse并在脚本体中进行配置吗?

Bre*_*arn 38

我会将导入放在顶部,但保留在if __name__块中使用它的代码:

import argparse

# other code. . .

def main(name):
    print('Hello, %s!' % name)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description = 'Say hello')
    parser.add_argument('name', help='your name, enter it')
    args = parser.parse_args()

    main(args.name)
Run Code Online (Sandbox Code Playgroud)

将导入放在顶部可以明确模块使用的模块.即使您不使用argpase也会导致性能影响微不足道.

  • [PEP 8](https://www.python.org/dev/peps/pep-0008/#imports)建议导入文件顶部的所有模块.我认为使用入口点测试的脚本没有例外. (7认同)

101*_*101 5

它的优良把import argparse该内if __name__ == '__main__'块,如果argparse该块内只提到。显然,如果您的模块是由另一个模块导入的,则该块中的代码将不会运行,因此该模块将必须为其提供自己的参数main(可能使用自己的实例ArgumentParser)。