download:基于Vue3+Vite+TS,二次封装element-plus业务组件
有时分我们会有这样的一个需求:
我们定义了一个 Python 的办法,办法接纳一些参数,但是调用的时分想将这些参数用命令行暴显露来。
比方说这里有个爬取办法:
import requests
def scrape(url, timeout=10):
response = requests.get(url, timeout=timeout)
print(response.text)
复制代码
这里定义了一个 scrape 办法,第一个参数接纳 url,即爬取的网址,第二个参数接纳 timeout,即指定超时时间。
调用的时分我们可能这么调用:
scrape('https:///www.baidu.com', 10)
复制代码
假如我们想改参数换 url,那就得改代码对吧。
所以有时分我们就想把这些参数用命令行暴显露来,这时分我们可能就用上了 argparse 等等的库,挨个声明各个参数是干嘛的,十分繁琐,代码如下:
parser = argparse.ArgumentParser(description='Scrape Function')
parser.add_argument('url', type=str,
help='an integer for the accumulator')
parser.add_argument('timeout', type=int,
help='sum the integers (default: find the max)')
if name == '__main__':
args = parser.parse_args()
scrape(args.url, args.timeout)
复制代码
这样我们才干顺利地运用命令行来调用这个脚本:
python3 main.py https://www.baidu.com 10
复制代码
是不是觉得十分费事?argparse 写起来又臭又长,想想就费力。
Fire
但接下来我们要引见一个库,用它我们只需求两行代码就能够做到如上操作。
这个库的名字叫做Fire,它能够快速为某个 Python 办法或者类添加命令行的参数支持。
先看看装置办法,运用 pip3 装置即可:
pip3 install fire
复制代码
这样我们就装置好了。
运用
下面我们来看几个例子。
办法支持
第一个代码示例如下:
import fire
def hello(name="World"):
return "Hello %s!" % name
if name == '__main__':
fire.Fire(hello)
复制代码
这里我们定义了一个 hello 办法,然后接纳一个 name 参数,默许值是 World,接着输出了 Hello 加 name 这个字符串。
然后接着我们导入了 fire 这个库,调用它的 Fire 办法并传入 hello 这个办法声明,会发作什么事情呢?
我们把这段代码保管为 demo1.py,接着用 Python3 来运转一下:
python3 demo1.py
复制代码
运转结果如下:
Hello World!
复制代码
看起来并没有什么不同。
但我们这时分假如运转如下命令,就能够看到一些神奇的事情了:
python3 demo1.py --help
复制代码
运转结果如下:
NAME
demo1.py
SYNOPSIS
demo1.py
FLAGS
--name=NAME
Default: 'World'
复制代码
能够看到,这里它将 name 这个参数转化成了命令行的一个可选参数,我们能够经过 —-name 来交换 name 参数。
我们来试下:
python3 demo1.py --name 123
复制代码
这里我们传入了一个 name 参数是 123,这时分我们就发现运转结果就变成了如下内容:
Hello 123!
复制代码
是不是十分便当?我们没有借助 argparse 就轻松完成了命令行参数的支持和交换。
那假如我们将 name 这个参数的默许值取消呢?代码改写如下:
import fire
def hello(name):
return "Hello %s!" % name
if name == '__main__':
fire.Fire(hello)
复制代码
这时分重新运转:
python3 demo1.py --help
复制代码
就能够看到结果变成了如下内容:
NAME
demo1.py
SYNOPSIS
demo1.py NAME
POSITIONAL ARGUMENTS
NAME
NOTES
You can also use flags syntax for POSITIONAL ARGUMENTS
复制代码
这时分我们发现 name 这个参数就变成了必传参数,我们必需在命令行里指定这个参数内容,调用就会变成如下命令:
python3 demo1.py 123
复制代码
运转结果还是一样的。