博客
关于我
一行命令实现功能?Google工程师是这样做的
阅读量:367 次
发布时间:2019-03-05

本文共 2175 字,大约阅读时间需要 7 分钟。

最近想尝试将一些做过的小工具打包在一起,合成Python实用宝典的常用工具盒以分享给大家,这个工具盒功能非常强大,包括但不限于:一行命令提取音乐的高潮部分、一行命令人脸识别、一行命令分类文本…等等,敬请期待!

不过,做这样的工具盒其实原理不复杂,就是将用户需要用到的自定义参数通过命令直接传入Python中运行,用户不需要管代码、也不需要理解代码、直接使用。不过,做工具盒的时候却发现这样的问题,现在常用的命令行传参工具实在是不够用。

比如下面这个argparse的简单例子, 它使得Python命令在运行的时候可以接受一个 -n 或者 --number 的数字,然后将该数字传入到Calculator的double中进行计算,以一行命令实现功能:

#!/usr/bin/python# -*- coding: utf-8 -*-import argparseclass Calculator(object):    """      简单算算数.    """    def double(self, number):        print(2 * number)def main():    parse = argparse.ArgumentParser()    parse.add_argument("-n", "--number", type=float, help="用于传入number的值")    args = parse.parse_args()    Calculator().double(args.number)if __name__ == '__main__':    main()

使用:

$python 1.py --number 2  4.0

看起来简单,但我还是嫌他太啰嗦了,如果我有许多个方法,岂不是要定义许多个参数?如果我有很多类方法,岂不是都得调用一遍?Google的工程师和我有一样的想法:简化它!他们开发了一个叫的模块。这个模块完美地解决了我的问题,简化了不少代码,请往下看。

1.准备

在开始前,你需要确保电脑上已经安装了Python,如果没有,请访问这篇文章: 进行安装。

安装完Python后,Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal).

进入我们刚下载好的文件夹,输入以下命令安装所需要的模块:

pip install fire

看到Successfully installed fire 则说明安装成功。

2.练练手

这个包用起来可比argparse舒服太多了,比如我们将文章开头说的那个例子简化一下:

import fireclass Calculator(object):    """      简单算算数.    """    def double(self, number):        print(2 * number)if __name__ == '__main__':    fire.Fire(Calculator)
$python 1.py double 10  20

多简洁啊!你理解了吗?它能够将参数作为Fire指定对象的目标函数,而后的数据则是传入该函数的值,最后计算得到结果并输出。

也就是说,无论你有多少种“工具 ” ,都可以将它的调用函数放到一个类中实现以函数名作为参数的调用方式。这样,我们能节省很多parse.add_argument的重复性操作。

3.更简洁的玩法

什么,居然还有更简洁的玩法?小编可不要吹牛不打草稿啊。我那么善良,像是会吹牛的人吗:

**import** fireenglish = 'Hello World'chinese = '你好,世界'fire.Fire()
$python 1.py english  Hello World
$python 1.py chinese  你好,世界

也就是说,它可以用来直接调用变量,如果你的函数生成结果最后都在变量上的话,可以不带参数直接获取。

它也可以直接用在函数上,比如来对数字排个序:

import firedef order_by_value(*items):    """    根据数字大小排序    """    sorted_items = sorted(items, key=lambda item: item)    return sorted_itemsif __name__ == '__main__':    fire.Fire(order_by_value)
$ python 1.py 20 30 1  1  20  30

太舒服了,用这个工具我一天能做十个工具(禁止套娃),也希望大家把它应用在自己经常需要使用的工具上,并在留言区里分享出你的开源项目,一行命令得到想要的结果,难道不香吗?

我们的文章到此就结束啦,如果你希望我们今天的,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦,有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 )

不只是一个宝典
欢迎关注公众号:Python实用宝典

原文来自Python实用宝典:

转载地址:http://mqdg.baihongyu.com/

你可能感兴趣的文章
MQTT工作笔记0009---订阅主题和订阅确认
查看>>
Mqtt搭建代理服务器进行通信-浅析
查看>>
MS Edge浏览器“STATUS_INVALID_IMAGE_HASH“兼容性问题
查看>>
ms sql server 2008 sp2更新异常
查看>>
MS UC 2013-0-Prepare Tool
查看>>
MSBuild 教程(2)
查看>>
msbuild发布web应用程序
查看>>
MSB与LSB
查看>>
MSCRM调用外部JS文件
查看>>
MSCRM调用外部JS文件
查看>>
MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
查看>>
MsEdgeTTS开源项目使用教程
查看>>
msf
查看>>
MSSQL数据库查询优化(一)
查看>>
MSSQL数据库迁移到Oracle(二)
查看>>
MSSQL日期格式转换函数(使用CONVERT)
查看>>
MSTP多生成树协议(第二课)
查看>>
MSTP是什么?有哪些专有名词?
查看>>
Mstsc 远程桌面链接 And 网络映射
查看>>
Myeclipse常用快捷键
查看>>