将它们作为变量传递时,我可以更改函数参数吗?

Jim*_*y C 2 python function

请原谅我标题中的不良措辞,但这里有一个更长的解释:

我有一个函数,作为参数需要一些函数,用于确定从数据库中检索哪些数据,如下所示:

def customer_data(customer_name, *args):
    # initialize dictionary with ids
    codata = dict([(data.__name__, []) for data in args])
    codata['customer_observer_id'] = _customer_observer_ids(customer_name)

    # add values to dictionary using function name as key
    for data in args:
        for coid in codata['customer_observer_id']:
            codata[data.__name__].append(data(coid))
    return codata
Run Code Online (Sandbox Code Playgroud)

这使得对函数的调用看起来像这样:

customer_data('customername', target_parts, source_group, ...)
Run Code Online (Sandbox Code Playgroud)

其中一个函数使用额外参数定义:

def polarization_value(customer_observer_id, timespan='day')
Run Code Online (Sandbox Code Playgroud)

我想要的是一种以巧妙的方式更改时间跨度变量的方法.一个显而易见的方法是在customer_observer中包含一个关键字参数,并在调用的函数名称为"polarization_value"时添加一个异常,但我觉得有更好的方法可以做到这一点.

Ash*_*ary 5

您可以使用functools.partial并传递polarization_value为:

functools.partial(polarization_value, timespan='day')
Run Code Online (Sandbox Code Playgroud)

例:

>>> import functools
def func(x, y=1):
    print x, y
...     
>>> new_func = functools.partial(func, y=20)
>>> new_func(100)
100 20
Run Code Online (Sandbox Code Playgroud)

您可能还会发现这有用:Python:为什么有functools.partial必要?

  • 是的,这是部分申请. (2认同)