如何将字典项用作父函数和子函数/子函数中的函数kwarg?

2024-04-27 15:10:06 发布

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

我正在写一个代码,其中一些函数需要许多输入变量。所以,我认为通过字典使这些输入变量可以调用kwargs是个好主意。父函数调用的函数kwargs有问题。作为一个简单的例子,考虑下面的代码。你知道吗

import numpy as np

## generate some data and call function via dict

def f(x):
    return np.cos(x)

data_one = np.linspace(1, 10, 10) # x
data_two = f(data_one) # y

xy_dict = dict(x=data_one, y=data_two) ## put x,y into dict

def try_dict_ops(x, y):
    c = [x[i] - y[i] for i in range(len(x)) if len(x) == len(y)]
    return np.array(c)

print(try_dict_ops(**xy_dict)) 
## prints array, it works

现在我将介绍一个父函数和相应的数据dict

abxy_dict = dict(a=1, b=4, x=data_one, y=data_two)

def try_nested_dict_ops(a, b, x, y):
    g = [try_dict_ops(x, y)[i] * a + b for i in range(len(x))]
    return np.array(g)

print(try_nested_dict_ops(**abxy_dict))
## prints array, it works 

我的问题是关于调用父函数的不同方法,父函数反过来调用上面定义的子函数。有没有一种更简单的方法不必显式地将xy放在abxy_dict中?此外,如果父函数调用两个不同的子函数,这两个子函数共享kwargs名称,但不一定是args值,那么在这样的设置下,我的目标是否仍然可行?你知道吗


Tags: 函数datalenreturndefnparrayone
1条回答
网友
1楼 · 发布于 2024-04-27 15:10:06

使用字典传递关键字参数只是调用函数的另一种拼写。无论函数本身如何调用,它都会以某种方式获取这些参数。你知道吗

换句话说,函数不关心是否使用

xy_dict = dict(x=data_one, y=data_two)
try_dict_ops(**xy_dict)

或者

try_dict_ops(x=data_one, y=data_two)

或者

try_dict_ops(data_one, data_two)

如果函数实际上不需要访问xy(因此传入它们的唯一目的是将它们传递给可传递的函数调用),那么只需在**kwargscatch all中捕获这些参数:

def try_nested_dict_ops(a, b, **kwargs):
    g = [try_dict_ops(**kwargs)[i] * a + b for i in range(len(x))]
    return np.array(g)

现在,传递给try_nested_dict_ops()的所有额外的关键字参数都传递给try_dict_ops()调用,而函数本身不需要知道这些参数是什么。您可以将其用于多个函数调用。你知道吗

然后需要xy作为关键字参数而不是位置参数传入。你知道吗

相关问题 更多 >