Python中的argparse模块

原创 2017年08月05日 20:44:25

简介

argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数.
如果你想详细的了解它的功能.建议阅读这个,或者这个
本篇文章只对其基本功能进行介绍,并对TensorFlow的examples中argarse使用进行详细的介绍

功能

原本的功能是命令行解析模块

使用argparse的第一步就是创建一个解析器对象,并告诉它将会有些什么参数。那么当你的程序运行时,该解析器就可以用于处理命令行参数。

解析器类是 ArgumentParser 。构造方法接收几个参数来设置用于程序帮助文本的描述信息以及其他全局的行为或设置。

import argparse
parser = argparse.ArgumentParser()
"""
    def __init__(self,
                 prog=None,
                 usage=None,
                 description=None,
                 epilog=None,
                 parents=[],
                 formatter_class=HelpFormatter,
                 prefix_chars='-',
                 fromfile_prefix_chars=None,
                 argument_default=None,
                 conflict_handler='error',
                 add_help=True,
                 allow_abbrev=True):
""""

parser.add_argument() 添加参数

这个方法是用来添加参数的方法,下面是一个示例

    parser.add_argument(
        '--hidden2',
        type=int,
        default=32,
        help='Number of units in hidden layer 2.'
    )

其中help是默认参数,你可以在构造parser 时选择其是否存在,在实际使用中 可以使用 -h 或者 –help调用该参数
第一个参数是字符串,也就是这个参数的名字,之后的参数(除help)都是以**kwargs传入的

def add_argument(self, *args, **kwargs):
"""
        add_argument(dest, ..., name=value, ...)
        add_argument(option_string, option_string, ..., name=value, ...)
        """

        # if no positional args are supplied or only one is supplied and
        # it doesn't look like an option string, parse a positional
        # argument
        # 如果只传入一个参数,那么默认只解析该参数(即使它不是字符串)

之后**kwargs 还有其他参数会被解析,其中type为参数数据类型,default为参数默认值,其他参数请参考argparse的源码

parser.parse_known_args() 获取已知参数

TensorFlow中的实例

FLAGS, unparsed = parser.parse_known_args()
print(FLAGS, unparsed)
print(sys.argv[0])
# 运行结果如下:
# Namespace(batch_size=100, hidden1=128, hidden2=32, learning_rate=0.01, num_epochs=2, train_dir='/tmp/data')
# []

部分源码如下

        if args is None:
            # args default to the system args
            args = _sys.argv[1:]
        else:
            # make sure that args are mutable
            args = list(args)

        # default Namespace built from parser defaults
        if namespace is None:
            namespace = Namespace()
    ...

 #parse the arguments and exit if there are any errors
        try:
            namespace, args = self._parse_known_args(args, namespace)
            if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR):
                args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR))
                delattr(namespace, _UNRECOGNIZED_ARGS_ATTR)
            return namespace, args
        except ArgumentError:
            err = _sys.exc_info()[1]
            self.error(str(err))

之所以返回的unparsed = [] 就是因为 args 实际 “不存在”

TensorFlow中argparse部分的运行

if __name__ == '__main__':
# 构建parser 
    parser = argparse.ArgumentParser()
    # 设置参数
    parser.add_argument(
        '--learning_rate',
        type=float,
        default=0.01,
        help='Initial learning rate.'
    )
    parser.add_argument(
        '--num_epochs',
        type=int,
        default=2,
        help='Number of epochs to run trainer.'
    )
    parser.add_argument(
        '--hidden1',
        type=int,
        default=128,
        help='Number of units in hidden layer 1.'
    )
    parser.add_argument(
        '--hidden2',
        type=int,
        default=32,
        help='Number of units in hidden layer 2.'
    )
    parser.add_argument(
        '--batch_size',
        type=int,
        default=100,
        help='Batch size.'
    )
    parser.add_argument(
        '--train_dir',
        type=str,
        default='/tmp/data',
        help='Directory with the training data.'
    )
    # 获取设置参数值,此时先前设置的FLAGS已经变成了 Namespace(batch_size=100, hidden1=128, hidden2=32, learning_rate=0.01, num_epochs=2, train_dir='/tmp/data')

    FLAGS, unparsed = parser.parse_known_args()
    # 运行 main 
    # argv=[sys.argv[0]] 为文件名
    # unparsed 为其他参数,但是实际上源码examples中不存在该部分
    tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
版权声明:转载请标明出处:http://blog.csdn.net/fontthrone

相关文章推荐

python学习之argparse模块

argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数 效果如下图: 代码如下: ...

python命令行解析模块argparse

英文原文地址: https://docs.python.org/3.4/library/argparse.html#module-argparse https://docs.python.org/...

python学习之argparse模块

一、简介: argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数,例如python parseTe...

python Argparse 模块入门

argparse是python标准库里面的用来处理命令行参数的库位置参数和选项参数先了解位置参数和选项参数的概念,以linux中’ls’命令为例[root@openstack_1 /]# ls bin...

python: argparse模块

在shell环境的python参数处理模块import argparse #description(可选参数):在shell环境下,调用'python test.py -h'时显示在开关的注释 par...

python的argparse模块的使用

一、简介: argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数,例如python parse...

python学习之argparse模块

一、简介: argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数,例如python parse...

Python中argparse模块的使用

argparse是python用于解析命令行参数的标准模块,用法如下: import argparse def test(a, b): print int(a)+int(b) parser...

python Argparse模块的使用

python Argparse模块的使用 一、简介: argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析...

python的argparse模块

1.设置一个解析器 解析器类是 ArgumentParser 定义格式如下: import argparse parser = argparse.ArgumentPa...
  • xzy94
  • xzy94
  • 2017-02-09 20:17
  • 317
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)