成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Google 開源的 Python 命令行庫:初探 fire

開發(fā) 后端 開源
本系列文章默認(rèn)使用 Python 3 作為解釋器進(jìn)行講解。若你仍在使用 Python 2,請(qǐng)注意兩者之間語法和庫的使用差異哦~

[[286655]]

一、前言

在本系列前面所有文章中,我們分別介紹了 argparse、docopt 和 click 的主要功能和用法。它們各具特色,都能出色地完成命令行任務(wù)。argparse 是面向過程的,需要先設(shè)置解析器,再定義參數(shù),再解析命令行,最后實(shí)現(xiàn)業(yè)務(wù)邏輯。docopt 先用聲明式的語法定義出參數(shù),再過程式地解析命令行和實(shí)現(xiàn)業(yè)務(wù)邏輯。click 則是用裝飾器的方式進(jìn)一步簡化顯式的命令調(diào)用邏輯,但仍然不夠面向?qū)ο蟆?/p>

而今天要介紹的 fire則是用一種面向廣義對(duì)象的方式來玩轉(zhuǎn)命令行,這種對(duì)象可以是類、函數(shù)、字典、列表等,它更加靈活,也更加簡單。

本系列文章默認(rèn)使用 Python 3 作為解釋器進(jìn)行講解。若你仍在使用 Python 2,請(qǐng)注意兩者之間語法和庫的使用差異哦~

二、介紹

fire 可以根據(jù)任何 Python 對(duì)象自動(dòng)生成命令行接口。它有如下特性:

  • 能以簡單的方式生成 CLI
  • 是一個(gè)開發(fā)和調(diào)試 Python 代碼的實(shí)用工具
  • 能將現(xiàn)存代碼或別人的代碼轉(zhuǎn)換為 CLI
  • 使得在 Bash 和 Python 間的轉(zhuǎn)換變得更容易
  • 通過預(yù)先為 REPL 設(shè)置所需的模塊和變量,使得實(shí)用 REPL 更加容易

通過如下命令可快速安裝 fire 庫:

  1. pip install fire 

三、快速開始

回憶下使用 argparse、docopt 和 click 實(shí)現(xiàn)命令行程序的步驟:

  • 對(duì)于 argparse 來說,要先設(shè)置解析器,再定義參數(shù),再解析命令行,最后實(shí)現(xiàn)業(yè)務(wù)邏輯(四步)
  • 對(duì)于 docopt 來說,要先定義定義接口描述,再解析命令行,最后實(shí)現(xiàn)業(yè)務(wù)邏輯(三步)
  • 對(duì)于 click 來說,就是實(shí)現(xiàn)業(yè)務(wù)邏輯和通過裝飾器的方式定義參數(shù)(兩步)

它們的實(shí)現(xiàn)步驟越來越簡單,從四步簡化到了兩步。而今天的主角 fire 只需一步,現(xiàn)業(yè)務(wù)邏輯就夠了。

這簡直簡單的不可思議,為什么這樣做就夠了?我們不妨考慮下 Python 中的函數(shù),函數(shù)是不是可以對(duì)應(yīng)一個(gè)命令行程序,而函數(shù)的參數(shù)可以對(duì)應(yīng)命令行程序的參數(shù)和選項(xiàng)呢?再看看 Python 中的類,一個(gè)類是不是可以對(duì)應(yīng)一個(gè)命令行程序,而類中的每個(gè)實(shí)例方法就可以對(duì)應(yīng)子命令,實(shí)例方法中的參數(shù)就是對(duì)應(yīng)子命令的參數(shù)和選項(xiàng)。

這么一想,理論上確實(shí)是可以實(shí)現(xiàn)的,我們不妨通過下面的示例來看看 fire 是如何讓我們通過簡單的方式實(shí)現(xiàn)命令行程序。

3.1 使用函數(shù)

來看這么一個(gè)例子:

  1. import firedef hello(name="World"):  return 'Hello  
  2. {name}!'.format(name=name)if __name__ == '__main__':   
  3. fire.Fire(hello) 

在上述例子中定義一個(gè) hello 函數(shù),它接受 name 參數(shù),并且有默認(rèn)值 "World"。使用 fire.Fire(hello) 即可非常簡單快速地實(shí)現(xiàn)命令功能,這個(gè)命令行就接受 --name 選項(xiàng),不提供時(shí)使用默認(rèn)值 "World",提供時(shí)就按提供的值來。

可在命令行中執(zhí)行下列命令:

  1. $ python hello.pyHello World!$ python hello.py --name=ProdesireHello 
  2.  Prodesire!$ python hello.py --helpINFO: Showing help with the  
  3. command 'hello.py -- --help'.NAME    hello.pySYNOPSIS    hello.py  
  4. <flags>FLAGS    --name=NAME 

3.2 使用類

使用函數(shù)是最簡單的方式,如果我們想以更有組織的方式來實(shí)現(xiàn),比如使用類,fire 也是支持的。

  1. import fireclass Calculator(object):  """A simple calculator  
  2. class."""  def double(self, number):    return 2 * number  def  
  3. triple(self, number):    return 3 * numberif __name__ == '__main__'
  4.  fire.Fire(Calculator) 

在上述例子中定義一個(gè) Calculator 類,它有兩個(gè)實(shí)例方法 double 和 triple,并且都接受 number 參數(shù),沒有默認(rèn)值。使用 fire.Fire(Calculator) 即可非常簡單快速地實(shí)現(xiàn)命令功能,這個(gè)命令行支持兩個(gè)子命令 double 和 triple,位置參數(shù) NUMBER 或選項(xiàng)參數(shù) --number

可在命令行中執(zhí)行下列命令:

  1. $ python calculator.py double 1020$ python calculator.py triple 
  2. --number=1545$ python calculator.py double --helpINFO: Showing help with 
  3. the command 'calculator.py double -- --help'.NAME    calculator.py 
  4. doubleSYNOPSIS    calculator.py double NUMBERPOSITIONAL ARGUMENTS    
  5. NUMBERNOTES    You can also use flags syntax for POSITIONAL ARGUMENTS 

四、小結(jié)

fire 的使用方式非常簡單,定一個(gè) Python 對(duì)象,剩下的就交給 fire 來處理,可謂是非常的 Pythonic,這也是它會(huì)如此受歡迎的原因。

除了上面展示的內(nèi)容,fire 還支持更多種類的 Python 對(duì)象,也擁有很多強(qiáng)大的功能,我們將在接下來幾節(jié)中逐步走近它。

責(zé)任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2019-11-06 19:21:07

Pythonargparse解釋器

2024-01-25 09:19:34

PythonFire開源庫

2020-02-13 10:57:59

Python數(shù)據(jù)設(shè)計(jì)

2013-05-21 14:58:08

系統(tǒng)監(jiān)視glances開源

2022-07-13 08:21:38

開源命令行工具Linux

2010-03-10 17:23:37

Python 命令行參

2015-07-01 09:15:46

linuxQuora命令行

2010-06-21 15:51:29

Linux命令Google服務(wù)

2020-12-10 16:16:08

工具代碼開發(fā)

2020-12-11 06:44:16

命令行工具開發(fā)

2010-11-16 11:50:21

oracle命令行登錄

2011-01-18 19:11:26

Postfix命令行

2010-03-11 15:55:23

Python命令行

2018-05-04 09:15:35

PythonPlumbum命令行

2022-04-09 10:02:59

HTTPLInux開源

2018-01-29 20:12:11

python翻譯命令行

2022-08-01 08:30:26

Python命令行

2010-07-15 10:47:22

Perl命令行

2012-02-08 16:37:36

ibmdw

2023-06-09 07:45:29

Kuberneteskubectl
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩精品在线免费观看 | 精品免费国产一区二区三区四区介绍 | 亚洲丝袜天堂 | 国产精品久久久久久久久久久久久久 | 国产精品91久久久久久 | 国产精品亚洲一区二区三区在线观看 | 国产露脸国语对白在线 | 亚洲国产成人在线视频 | av福利网| 亚洲综合大片69999 | 天天精品在线 | 久久精品一区二区 | 欧美性区| 亚洲福利视频网 | 激情婷婷| 一起操网站 | 成人免费三级电影 | 日日夜夜天天 | 免费视频久久 | 成人一级黄色毛片 | 日韩三级一区 | 亚洲欧洲精品在线 | 欧美色综合一区二区三区 | 欧洲一级毛片 | 97视频在线观看免费 | 精品亚洲一区二区三区四区五区高 | 一区二区三区视频免费观看 | 色网在线看 | 夜夜爽99久久国产综合精品女不卡 | 九九热在线免费观看 | 性色av一区二区三区 | 亚洲乱码国产乱码精品精的特点 | 黄网站在线观看 | 亚洲品质自拍视频网站 | 国产精品九九九 | 91超碰caoporn97人人 | 日韩中文字幕在线观看 | www.av7788.com| 福利av在线 | 日韩在线精品视频 | 亚洲欧美一区二区三区在线 |