zoukankan      html  css  js  c++  java
  • python库fire使用简介

    简介

    目前python命令行解析库用过的有:argparse(python自带)、click(Flask作者写的)

    但二者相比fire这个库,用起来都不够 “简单”,fire一行代码能把函数导出到命令行窗口。

    argparse用法示例

    # arg_test.py
    
    import argparse
    
    def counter(file_type=None):
        return {file_type: 100}
    
    # 初始化解析器
    parser = argparse.ArgumentParser()
    # 定义参数
    parser.add_argument("-f", "--file", help="统计指定文件类型")
    # 解析
    args = parser.parse_args()
    print(counter(args.file))

    运行:

    $ python arg_test.py -f python
    {'python': 100}

    click用法示例

    # firetest.py
    
    import click
    
    @click.command()
    @click.option("-f", "--file", help="统计制定文件类型")
    def counter(file=None):
        click.echo({file: 100})
    
    if __name__ == '__main__':
        print(counter())

    运行:

    $ python firetest.py -f python
    {u'python': 100}

    fire安装

    # pip安装:pip install fire
    # conda安装:conda install fire -c conda-forge
    # 源码安装: git拿到代码,执行:python setup.py install

    fire使用示例

    通常:python [文件名] [函数名] [参数]

    官方文档:https://github.com/google/python-fire/blob/master/docs/guide.md

    fire.Fire()

    直接在程序中调用 fire.Fire(),不需要修改目标函数,fire 会把当前模块下的所有对象导出到命令行中

    # firetest.py
    
    import fire
    
    def foo(name):
        return 'foo {name}!'.format(name=name)
    
    def bar(name):
        return "bar {name}".format(name=name)
    
    if __name__ == '__main__':
        fire.Fire()

    运行:

    # 调用方式:python [文件名] [函数名] [参数]
    
    # 函数名后面直接跟参数值
    $ python firetest.py foo hello
    foo hello!
    # 也可以显示地先指定参数名,再跟参数值
    $ python firetest.py bar --name hello
    bar hello!

    fire.Fire(<function>)

    可以指定某个函数导出到命令行

    import fire
    
    def foo(name):
        return 'foo {name}!'.format(name=name)
    
    if __name__ == '__main__':
        fire.Fire(foo)

    运行:

    # 调用方式:python [函数名] [参数]
    $ python firetest.py hello
    foo hello!

    当 Fire 接收函数 foo 作为参数时,只加载 foo 函数到命令行中,此时,在命令行中运行时也无需再指定函数名字,只需要指定参数就好。

    fire.Fire(<dict>)

    Fire 不仅可以接收函数,还可以接收字典对象作为参数,可在字典中配置那些函数需要导出到命令行中。

    例如,有加减乘3个函数,我们可以选择性的选择其中2个导出到命令行:

    import fire
    
    def add(x, y):
        return x + y
    
    def multiply(x, y):
        return x * y
    
    def subtract(x, y):
        return x - y
    
    if __name__ == '__main__':
        fire.Fire({
            'add': add,
            'subtract': subtract,
        })

    运行:

    $ python firetest.py add 1 4
    5
    $ python firetest.py subtract 1 4
    -3
    $ python firetest.py multiply 1 4
    # multiply 会报错,因为没有导出

    fire.Fire(<object>)

    还可以接收类的实例对象

    import fire
    
    class Calculator(object):
    
      def add(self, x, y):
        return x + y
    
      def multiply(self, x, y):
        return x * y
    
    if __name__ == '__main__':
      calculator = Calculator()
      fire.Fire(calculator)

    运行:

    $ python firetest.py add 10 20
    30
    $ python firetest.py multiply 10 20
    200

    参考文章:https://mp.weixin.qq.com/s/lMOieL_RFRHsh5OW4G4axg

  • 相关阅读:
    实现新layer的时候易犯的错误
    caffe实现focal loss层的一些理解和对实现一个layer层易犯错的地方的总结
    面经准备
    发送广播
    labelme也可以标注polygan
    中期答辩准备的东西
    授人以鱼,不如授人以渔
    python中strip()函数的理解
    栈的应用
    checkStyle使用具体解释
  • 原文地址:https://www.cnblogs.com/bigtreei/p/13260181.html
Copyright © 2011-2022 走看看