Python:将函数作为参数传递,并设置选项

Python: pass function as parameter, with options to be set

在Python中,我需要在相同的输入参数sampleAsampleB上调用许多非常相似的函数。唯一的问题是,其中一些函数需要设置一个选项,而另一些则不需要。例如:

1
2
3
4
5
6
7
import scipy.stats
scipy.stats.mannwhitneyu(sampleA, sampleB)
[...some actions...]
scipy.stats.mstats.ks_twosamp(sampleA, sampleB, alternative='greater')
[...same actions as above...]
scipy.stats.mstats.mannwhitneyu(sampleA, sampleB, use_continuity=True)
[...same actions as above...]

因此,我想传递一些函数的名称,例如更通用的函数computeStats的输入参数,以及sampleAsampleB,但我不知道如何处理有时必须使用的选项。

1
2
3
4
def computeStats(functionName, sampleA, sampleB, options???):
   functionName(sampleA, sampleB)  #and options set when necessary
   ...some actions...
   return testStatistic

如何指定一个有时必须设置,有时不能设置的选项?


使用**kwargs

1
2
3
4
def computeStats(func, sampleA, sampleB, **kwargs):
   func(sampleA, sampleB, **kwargs)
   ...some actions...
   return testStatistic

然后您就可以像这样使用EDOCX1[1]

1
computeStats(scipy.stats.mstats.ks_twosamp, sampleA, sampleB, alternative='greater')

也就是说,我并不完全相信你需要这个。简单点怎么样

1
2
3
4
5
def postprocessStats(testStatistic):
   ...some actions...
   return testStatistic

postprocessStats(scipy.stats.mstats.ks_twosamp(sampleA, sampleB, alternative='greater'))

我认为这更容易阅读,同时也更一般。