通过接受集和返回集将两个函数重构为一个函数

2024-04-25 06:30:08 发布

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

我有几个函数可以根据输入字典计算不同的统计数据,例如max、min、sum、average、median。你知道吗

我想把所有这些函数合并成一个函数,而不是用不同的方法。因此,呼叫方可以执行以下操作:

(minValue, averageValue, maxValue) = myFunction(min, avg, max, data, key, ...)

或者

(minValue, maxValue) = myFunction(min, max)

我是python新手,我正在尝试理解如何使用集合来实现这一点! 请不要建议其他解决这个问题的方法,因为我也在尝试学习python和python语法。举个小例子就好了。你知道吗


Tags: 方法函数data字典minmax统计数据avg
2条回答
def myFunction(data,*args):
    return tuple( f(data) for f in args) )

例如:

myFunction(data, min, avg, max)
# returns (min(data), avg(data), max(data)), and you can get them by
minValue, averageValue, maxValue = myFunction(data, min, avg, max)

如果要包括key

def myFunction2(data, *args, **kwargs):
    if 'key' not in kwargs:
        kwargs['key'] = lambda x: x # identity map (pass without a key)
    return tuple( f(data, key=kwargs['key']) for f in args )

例如:

myFunction2(['a','bc','f'], min, max)          # ('a', 'f')
myFunction2(['a','bc','f'], min, max, key=len) # ('a', 'bc')

不能使用集合来实现这一点,因为集合没有顺序;例如,Python不知道哪个值是minValue,哪个值是maxValue。你知道吗

但是,您可以返回元组:

return value1, value2, value3

演示:

>>> def foo():
...     return 1, 2, 3
...
>>> retval1, retval2, retval3 = foo()
>>> retval3
3

相关问题 更多 >