【发布时间】:2019-12-26 18:39:06
【问题描述】:
假设我有一个字典:
d = {'a': 3, 'b':4}
我想创建一个与这个函数做完全相同的事情的函数 f:
def f(x, a=d['a'], b=d['b']):
print(x, a, b)
(不一定是打印,而是对变量做一些事情并直接从他们的名字中调用)。
但是我想直接从dict中创建这个函数,也就是说,我想要一些看起来像的东西
def f(x, **d=d):
print(x, a, b)
其行为类似于之前定义的函数。这个想法是我有一个大字典,其中包含我的函数参数的默认值,我不想这样做
def f(a= d['a'], b = d['b'] ...)
我不知道在 python 中是否有可能。任何见解都值得赞赏!
编辑:这个想法是能够调用f(5, a=3)。
Edit2:问题不是将存储在字典中的参数传递给函数,而是定义一个函数,其参数名称和默认值存储在字典中。
【问题讨论】:
-
可以创建一个只取字典的函数,然后在函数内部解析字典
-
为什么不传递整个字典?搜索诸如trick之类的原因是什么?
-
这个想法是我希望能够调用
f(3, a=5)而不必传递字典。 -
没有一种“干净”的方法可以做到这一点。要在函数中创建局部变量(实际上就是关键字参数),您可能不得不求助于
exec,如this answer 到related question 中所示。 -
虽然我发现这是一个有趣的问题,但我认为重新思考和设计可能更安全、更惯用,以便您只使用显式字典(或其他对象)而不是函数的本地命名空间。
标签: python