当前位置: 首页 > 知识库问答 >
问题:

将参数作为数据结构传递给Python函数

储臻
2023-03-14

我正在使用一个第三方库函数,它有大量的位置参数和命名参数。在我的代码中,从多个点使用相同的参数/值调用该函数。

为了便于维护,我不想在代码中多次硬编码几十个相同的参数。我希望有一种方法可以在数据结构中存储它们一次,所以我只需要传递数据结构。按照以下思路:

假设我调用的函数的签名如下:

def lib_function(arg1, arg2, arg3=None, arg4=None): 

假设在我的代码中,我想用

  • afor arg1,
  • bfor arg2
  • dfor arg4
  • (而且我没有使用arg3)。

我已尝试按如下方式定义数据结构:

arguments = ('a', 'b', {'arg4':'d'})

然后像这样使用它:

res = lib_function(arguments)

但这显然是不正确的-tuple和dict在调用过程中没有解压缩,而是作为单个第一个参数处理。

在Python中有这样做的方法吗?

显而易见的替代方案是在我的代码中lib_function代理,在代理中对参数进行硬编码,然后在没有参数的情况下调用代理。类似的东西:

def proxy_lib_function():
    return lib_function('a', 'b', arg4='d')

res = proxy_lib_function()

但是我想检查一下,没有比这更像蟒蛇的方法了。

共有2个答案

钱峻
2023-03-14

您的功能是:

 def lib_function(arg1, arg2, arg3=None, arg4=None): 

定义另一个函数:

 def yourFunction(x):
    return lib_function(x[0], x[1], x[2], x[3])

“数据结构”将是:

data = [yourData1, yourData2, yourData3, yourData4]

然后,您可以使用以下命令调用新函数:

yourFunction(data)
汤英豪
2023-03-14

分离位置参数和命名参数,并使用星号解压:

def lib_function(arg1, arg2, arg3=None, arg4=None):
    print(locals())


args = ("a", "b")
kwargs = {"arg4": "d"}
res = lib_function(*args, **kwargs)
 类似资料:
  • 问题内容: 我已经熟悉Android框架和Java,并希望创建一个通用的“ NetworkHelper”类,该类可以处理大多数联网代码,使我能够从中调用网页。 我遵循了来自developer.android.com的这篇文章来创建我的网络类:http : //developer.android.com/training/basics/network- ops/connecting.html 码:

  • 我正在尝试通过:如果流文件; 在我的主()中,到一个名为“FIFO”的类的构造函数:FIFO(文件); 在FIFO(FIFO.h)的头文件中,我有: 在FIFO.cc,我有: 我一直喜欢(还有更多,我只是粘贴其中一个): 在文件包括从/usr/lib/gcc/x86_64-redhat linux/4.4.7/…/…/…/…/包含/c /4.4.7/bits/localefwd.h: 43,从/u

  • 问题内容: 我已经看过其他答案,但似乎无法解决这个问题。我正在尝试在DLL中调用一个函数以与SMBus设备进行通信。此函数采用指向结构的指针,该结构具有一个数组作为字段之一。所以… 在C中: 我想我必须在DLL填充数据数组时为Address,Command和BlockLength设置值。需要此结构的函数将其作为指针 因此,我已经像这样在Python中设置了结构: 注意:我也尝试过ctypes.c_

  • 问题内容: 我想使用字典在python中调用一个函数。 这是一些代码: 这可以打印,但我希望只打印test。 我希望它可以类似地工作以获取更多参数: 这可能吗? 问题答案: 最后自己解决了。很简单,我只是缺少运算符来解开字典 因此,我的示例变为:

  • 问题内容: 我的密码 第一个文件: 第二档: 在上面的代码中,仅将“数据”字典的键传递给,但我希望键值对传递。如何纠正呢? 我希望这样被修改 这是我的要求,根据此给出答案 编辑: 字典键 类 更改为 标准 问题答案: 如果要像这样使用它们,请正常定义变量名称的函数: 现在,您可以在 调用 函数时使用: 它会按您想要的方式工作。 PS 请勿使用。等保留字(例如,改用)

  • 我试图将构造函数参数动态传递给Springboot框架中的一个bean。我已经使用context.getBean(class,arg...)在Spring中动态传递构造函数参数,但它没有成功获取值并显示默认值。我的代码有什么问题? 项目结构: 应用程序上下文.xml 应用 活动 输出: