你還在用argparse嗎?

argparse是Python的一個生成命令行參數的模塊,在寫一些公用腳本的時候經常用到,它可以很方便地讓別人(和以後的自己)明白,你的程序需要哪些參數,哪些是必須的,它們各自的意義是什麼?但是這個模塊用的時候,要寫挺多東西,所以很多時候,如果有的程序只是自己用,或者甚至是用一兩次的,多半用的是另一個簡單快捷的方法傳入參數:sys.argv。

sys是標準庫自帶模塊,argv是一個命令行參數的列表,保存了程序運行時傳給它的所有參數,包括程序自身的名字(sys.argv[0]),所以我們給程序的外部參數,都是從1開始計。這種方法簡單直接,一般寫一些自己用,或者偶爾用一下的程序,比較方便,但是它有一個問題,參數多了的話,容易混淆,而且沒有參數類型的校驗,可能在不經意的時候會遇到問題。

Python-fire是Google最近開源的一個模塊,官方對這個模塊使用場景的定義是:

  • Python中簡單地實現命令行(CLI)
  • 幫助開發和調試Python代碼
  • 通過它探索別人的代碼,或者把別人代碼轉變成CLI為己所用
  • 實現Bash和Python混搭(看過例子你就會知道,通過fire很容易實現)

安裝

#實測Python2、3都支持npip install fire n

使用舉例

你可以對Python的函數、類、對象、字典、列表等各個組分調用Fire()方法。這裡僅舉兩個例子,更多例子請參考github文檔。

函數

import firenndef hello(name):nreturn Hello {name}!.format(name=name)nnif __name__ == __main__:n fire.Fire()n

這裡只寫了一個函數,其實可以定義多個函數,這些函數都可以通過Fire()暴露到外邊,供你使用。或者可以使用一個主函數main為入口,而後通過fire.Fire(main)調用主函數。

#使用example.pyn$ python example.py hello WorldnHello World!n

字典

import firenndef add(x, y):nreturn x + ynndef multiply(x, y):nreturn x * ynnif __name__ == __main__:n fire.Fire({nadd: add,nmultiply: multiply,n })n

這種方法和前面直接定義多個函數,而後通過fire.Fire()使用,效果上沒區別,但是可以對引入哪些函數,怎麼調用,有更多控制,適用於方法(函數)較多的情況。

#使用example.pyn$ python example.py add 10 20n30n$ python example.py multiply 10 20n200n

這個項目開源出來距今才26天,star數目已經超過4500個,其受歡迎程度可以想見。通過這兩天的使用,發現用它的好處,除了顯而易見的方便,還會迫使自己,寫更加模塊化、清晰化的代碼。

本文同步發佈於公眾號JackTalk和知乎專欄,轉載請聯繫告知。

推薦閱讀:

R 學習筆記: plyr 包還得學習一個
機器學習注釋剪切分支點
使用API訪問ClinVar數據
碼農轉臨床,未來想做癌症數據分析,解決癌症問題,可行嗎?
生信進階第2課-你應該知道的人類基因組信息

TAG:生物信息学 | Python |