如何通过参数化python脚本来组合它们?

2024-06-07 08:09:39 发布

您现在位置:Python中文网/ 问答频道 /正文

在调用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()

^{pr2}$

如您所见,这两个脚本执行完全相同的操作,但只是调用不同的mean()函数,并在main()处打印不同的输出。当用户在控制台/终端调用时,我如何将它们组合起来并允许用户给出一个mean option参数/参数?E、 g.组合的脚本是call meannie.py

$ python meanie.py harmonic 1 2 3
$ python meanie.py hm 1 2 3 

上面的命令应该给出与调用相同的输出(这就是用户现在如何调用harmonic_mean()脚本):

$ python hm.py 1 2 3 

Tags: of用户pyimport脚本参数maindef
1条回答
网友
1楼 · 发布于 2024-06-07 08:09:39

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模块,它比滚动您自己的命令行界面更容易出错。在

相关问题 更多 >

    热门问题