类型化参数分析器

typed-argument-parser的Python项目详细描述


类型化参数分析器(tap)

pypi-python版本pypi version

tap是python的argparse库的类型化现代化。

点击提供以下好处:

  • 静态类型检查
  • 代码完成
  • 源代码导航(例如转到定义和实现)

tap

目录

安装

tap需要python 3.6+

要安装tap,请运行以下命令:

git clone https://github.com/kswanson-asapp/typed-argument-parser.git
cd typed-argument-parser
pip install -e .

tap是python原生的

要了解这一点,让我们看一个示例:

"""main.py"""fromtapimportTapclassSimpleArgumentParser(Tap):name:str# Your namelanguage:str='Python'# Programming languagepackage:str='Tap'# Package namestars:int# Number of starsmax_stars:int=5# Maximum starsargs=SimpleArgumentParser().parse_args()print(f'My name is {args.name} and I give the {args.language} package 'f'{args.package}{args.stars}/{args.max_stars} stars!')

使用TAP的方式与使用标准argparse的方式相同。

>>> python main.py --name Jesse --stars 5
My name is Jesse and I give the Python package Tap 5/5 stars!

等效的argparse代码是:

"""main.py"""fromargparseimportArgumentParserparser=ArgumentParser()parser.add_argument('--name',type=str,required=True,help='Your name')parser.add_argument('--language',type=str,help='Programming language')parser.add_argument('--package',type=str,default='Tap',help='Package name')parser.add_argument('--stars',type=int,required=True,help='Number of stars')parser.add_argument('--max_stars',type=int,default=5,help='Maximum stars')args=parser.parse_args()print(f'My name is {args.name} and I give the {args.language} package 'f'{args.package}{args.stars}/{args.max_stars} stars!')

python本机的优点包括能够:

  • 覆盖方便的内置方法(例如process\u args确保参数之间的一致性)
  • 添加自定义方法
  • 从您自己的模板类继承

轻触功能

现在,我们将重点介绍一些我们最喜欢的功能,并举例说明它们在实践中的工作原理。

参数

参数被指定为在tap的子类中定义的类变量。定义为name:type的变量是必需的参数,而定义为name:type=value的变量不是必需的,并且默认为提供的值。

classMyTap(Tap):required_arg:strdefault_arg:str='default value'

帮助字符串

在运行python main.py-h时,单行注释会自动解析为提供的帮助字符串。参数的类型和默认值也在帮助字符串中提供。

"""main.py"""fromtapimportTapclassMyTap(Tap):x:float# What am I?pi:float=3.14# I'm pi!args=MyTap().parse_args()

运行python main.py-h将导致以下结果:

>>> python main.py -h
usage: demo.py --x X [--pi PI] [-h]

optional arguments:
  --x X       (float, required) What am I?
  --pi PI     (float, default=3.14) I'm pi!
  -h, --help  show this help message and exit

灵活地添加参数

python的argparse通过add_argument方法提供了许多高级参数解析功能。由于tap是argparse的包装,tap提供了所有相同的功能。

要使用此功能,首先像往常一样将参数定义为类变量,然后重写tap的add_arguments并使用self.添加参数就像使用argparse的添加参数

fromtapimportTapclassMyTap(Tap):positional_argument:strlist_of_three_things:List[str]argument_with_really_long_name:intdefadd_arguments(self):self.add_argument('positional_argument')self.add_argument('--list_of_three_things',nargs=3)self.add_argument('-arg','--argument_with_really_long_name')

类型

轻触可自动处理以下所有类型:

str,int,float,boolOptional[str],Optional[int],Optional[float]List[str],List[int],List[float]Set[str],Set[int],Set[float]

这些参数的解析如下:

strintfloat:每种类型都自动解析为各自的类型,就像argparse一样。

bool:如果参数arg指定为arg:boolarg:bool=false,则将--arg标志添加到命令行将设置argtrue。如果arg被指定为arg:bool=true,则添加--argarg设置为false

可选:这些参数的解析方式与strintfloat完全相同

list:如果参数arglist,只需指定用空格分隔的值,就像使用常规argparse一样。例如,--arg 123解析为arg=[1,2,3]

集合:与列表相同,但解析为集合而不是列表。

更复杂的类型必须用add_参数中的type关键字参数指定,如下例所示。

git clone https://github.com/kswanson-asapp/typed-argument-parser.git
cd typed-argument-parser
pip install -e .
0

使用process\u args进行参数处理

在复杂的参数解析中,参数往往最终具有相互依赖性。这意味着可能需要禁止某些参数组合,或根据其他参数修改某些参数。

要处理这种情况,只需覆盖process_args并添加所需的逻辑。调用parse args时,将自动调用process args

git clone https://github.com/kswanson-asapp/typed-argument-parser.git
cd typed-argument-parser
pip install -e .
1

正在处理已知参数

与argparse的parse_known_args类似,tap能够只解析它知道的参数,而不会由于附加参数而引发错误。这可以通过调用parse_argsknown_only=true来实现。通过访问tap对象的extra_args字段,剩下的未解析参数可用。

git clone https://github.com/kswanson-asapp/typed-argument-parser.git
cd typed-argument-parser
pip install -e .
2

子类化

有时定义一个模板tap,然后将其子类化以用于不同的用例是很有用的。由于tap是一个本机python类,继承是内置的,因此很容易从模板tap进行自定义。

在下面的示例中,starstapawardstapbasetap继承参数(package是很酷的)和方法(处理参数)。

git clone https://github.com/kswanson-asapp/typed-argument-parser.git
cd typed-argument-parser
pip install -e .
3

打印

tap使用python的漂亮打印机以易于阅读的格式打印参数。

git clone https://github.com/kswanson-asapp/typed-argument-parser.git
cd typed-argument-parser
pip install -e .
4

运行python main.py--package tap,结果是:

git clone https://github.com/kswanson-asapp/typed-argument-parser.git
cd typed-argument-parser
pip install -e .
5

再现性

tap使再现性变得容易,特别是在git repo中运行代码时。

再现性信息

具体来说,tap有一个名为get_reprodubility_info的方法,该方法返回一个字典,其中包含复制运行代码所用设置所需的所有信息。这本词典包括:

  • python命令
    • 用于运行程序的python命令
    • 例如,python main.py—包点击
  • <时间>
    • 运行命令的时间
    • 例如:2019年8月15日星期四00:09:13
    吉特根
    • 包含代码的git repo的根
    • 例如,/users/swansonk14/类型化参数分析器
    Git URL
    • 指向git repo的url,特别指向当前git散列(即本地repo中head的散列)
    • 例如tps://github.com/swansonk14/typed-argument-parser/tree/446cf046631d6bdf7cab6daec93bf7a02ac00998" rel="nofollow">https://github.com/swansonk14/typed-argument-parser/tree/446cf046631d6bdf7cab6daec93bf7a02ac00998
  • 未提交的更改
    • git repo中是否有任何未提交的更改(即代码是否与上面git hash中的代码不同)
    • 例如truefalse

保存参数

tap有一个名为save的方法,它将所有参数以及可复制性信息保存到json文件中。

git clone https://github.com/kswanson-asapp/typed-argument-parser.git
cd typed-argument-parser
pip install -e .
6

在运行python main.py--package tap之后,文件args.json将包含:

git clone https://github.com/kswanson-asapp/typed-argument-parser.git
cd typed-argument-parser
pip install -e .
7

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何下载多个。java中的PDF文件   linux Java打开文件,形成实际用户主页~/   java如何在时间线内维护TableView选择?   java Hibernate注释@Where vs@WhereJoinTable   Java读/写访问异常FileNotFoundException(访问被拒绝)   继承在Java中是否可以扩展最后一个类?   Android HttpClient使用java使应用程序崩溃。lang.OutOfMemoryError:pthread_create   java为什么即使我在proguardproject中添加了jar文件,也会出现这种错误。txt?   如果添加JButton,swing Java FocusListener和KeyListener将无法工作   java使用solrj检索json格式的SolrDocument   使用Microsoft Visual Studio代码进行Java编程   java NoClassDefFoundError:org/apache/log4j/Logger   哈希集中包含相等对象的java   java中的参数化构造函数是否需要有一个主体?   java类似于NetBeans不必要的代码检测器   Java实践问题   java Blackberry“[projectname].调试文件丢失”和“I/O错误:找不到程序”jar