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

时间:2015-01-15 05:35:44

标签: python scripting

如果我在脚本中使用argparse和if __name__ == '__main__'测试我也想用作模块,我应该在该测试下导入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)

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

2 个答案:

答案 0 :(得分:29)

我会将导入放在顶部,但保留在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)

将导入放在顶部可以阐明模块使用的模块。即使您不使用它,导入argpase也会对性能产生微不足道的影响。

答案 1 :(得分:3)

如果import argparse仅在该块中引用if __name__ == '__main__',则可以将argparse置于main块内。显然,如果您的模块是由另一个模块导入的,那么该块中的代码将不会运行,因此该模块必须为ArgumentParser提供它自己的参数(可能使用它自己的{{1}}实例)。 / p>