[英]How to combine python scripts by parameterizing them?
我有多個腳本,它們在調用python腳本( https://github.com/alvations/meanie )時,以給定的數字列表作為參數來計算不同的均值:
例如, harmonic_mean()
:
# -*- coding: utf-8 -*-
import math
def harmonic_mean(x): # x is a list of values.
""" Returns the harmonic mean given a list of values. """
return len(x) / sum([1/i for i in x])
def main(means):
print "Input:", means
means = map(float,means)
print "harmonic mean = ", harmonic_mean(means)
if __name__ == '__main__':
import sys
if len(sys.argv) < 2:
sys.stderr.write('Usage: python %s mean1 mean2 mean3 ... \n' % sys.argv[0])
sys.exit(1)
main(sys.argv[1:])
和root_mean_square()
# -*- coding: utf-8 -*-
import math
def root_mean_square(x): # x is a list of values.
""" Returns the root mean square (rms) given a list of values. """
return math.sqrt(sum([i*i for i in x])/len(x))
def main(means):
print "Input:", means
means = map(float,means)
print "root mean square = ", root_mean_square(means)
if __name__ == '__main__':
import sys
if len(sys.argv) < 2:
sys.stderr.write('Usage: python %s mean1 mean2 mean3 ... \n' % sys.argv[0])
sys.exit(1)
main(sys.argv[1:])
如您所見,這兩個腳本執行的功能完全相同,只是調用了不同的mean()
函數,並在main()
打印了不同的輸出。 如何將它們組合在一起,並允許用戶在控制台/終端上調用它們時給出均值選項參數/自變量? 例如,合並后的腳本是調用meannie.py
:
$ python meanie.py harmonic 1 2 3
$ python meanie.py hm 1 2 3
上面的命令應提供與調用相同的輸出(這是用戶現在如何調用諧和_mean()腳本的方式):
$ python hm.py 1 2 3
Python具有一流的功能; 它們是與其他所有事物一樣的對象,可以以相同的方式傳遞。 因此,您只需要一種將用戶輸入映射到指定函數,然后將其傳遞到main
函數的方法:
def harmonic_mean(x):
...
def root_mean_square(x):
...
MEAN_FUNCS_MAP = {
'hm': harmonic_mean,
'harmonic': harmonic_mean,
'rms': root_mean_square,
}
def main(mean_fn, means):
print "Input:", means
means = map(float,means)
print "root mean square = ", mean_fn(means)
if __name__ == '__main__':
import sys
if len(sys.argv) < 3 or sys.argv[1] not in MEAN_FUNCS_MAP:
sys.stderr.write('Usage: python %s <function> <mean1> <mean2> <mean3> ... \n' % sys.argv[0])
sys.exit(1)
main( MEAN_FUNCS_MAP[sys.argv[1]], sys.argv[2:] )
您可能還應該看看argparse模塊,它比滾動您自己的命令行界面要容易得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.