0
点赞
收藏
分享

微信扫一扫

算法与数据结构体系课【已完结】

​download:​​算法与数据结构体系课【已完结】​​

有时分我们会有这样的一个需求:

我们定义了一个 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

复制代码

运转结果还是一样的。

举报

相关推荐

0 条评论