python - "unpacking"将字典传递到 Python 中函数的 namespace ?

标签 python function dictionary parameters

在我做的工作中,为了方便起见,我经常需要将参数分组为子集:

d1 = {'x':1,'y':2}
d2 = {'a':3,'b':4}

我通过传入多个字典来做到这一点。大多数时候我直接使用传递的字典,即:

def f(d1,d2):
    for k in d1:
        blah( d1[k] )

在某些函数中我需要直接访问变量,事情变得很麻烦;我真的想要本地 namespace 中的这些变量。我希望能够做类似的事情:

def f(d1,d2)
    locals().update(d1)
    blah(x)
    blah(y)    

但是 locals() 返回的字典更新并不能保证真正更新命名空间。

这是显而易见的手动方式:

def f(d1,d2):
    x,y,a,b = d1['x'],d1['y'],d2['a'],d2['b']
    blah(x)
    return {'x':x,'y':y}, {'a':a,'b':b}

这导致每个函数的参数列表重复三个。这可以通过装饰器自动化:

def unpack_and_repack(f):
    def f_new(d1, d2):
        x,y,a,b = f(d1['x'],d1['y'],d2['a'],d3['b'])
        return {'x':x,'y':y}, {'a':a,'b':b}
    return f_new
@unpack
def f(x,y,a,b):
    blah(x)
    blah(y)
    return x,y,a,b

这导致装饰器重复三个,每个函数加上两个重复,所以如果你有很多函数会更好。

有没有更好的方法?也许使用 eval 的东西?谢谢!

最佳答案

您始终可以将字典作为参数传递给函数。例如,

dict = {'a':1, 'b':2}
def myFunc(a=0, b=0, c=0):
    print(a,b,c)
myFunc(**dict)

关于python - "unpacking"将字典传递到 Python 中函数的 namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1897623/

相关文章:

python - 如何使用 matplotlib 正确绘制带有 pdf 的归一化直方图?

python - 如何在启动时在 Python IDLE 中预加载 Python 模块?

MySQL保存textarea的值

javascript - Angular 未知提供者,其工厂封装在匿名函数中

python - 如何使用列表理解同时检查字典中的不同值键

list - 将列表转换为字典 - Ansible YAML

python - 在 Windows 中检测带有 Unicode 字符的文件名

python - Flask-restplus 返回编码(marshal)模型而不是数据

python - 局部变量可能在赋值前被引用

C++ 记忆化理解