- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在我做的工作中,为了方便起见,我经常需要将参数分组为子集:
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/
dependencies:unpack-dependencies 可以解压哪些存档格式?例如,据我所知,它无法解压 RPM 包。是否有它支持的格式列表?有什么技巧可以让 maven 解压 RPM 包吗
谁能给我解释一下为什么在 test1 上,nums 是 [[0,0],[-1,-1],[0,0],[0,0]] 而不是在测试2上?据我了解,python for xx in xxx 与任何其他语言中的
我想按照建议在 php 中读取一个二进制文件作为字节 [] here我 unpack 'ed fread 的输出。所以我有类似的东西: $file=fopen($filename,'r'); fsee
首先,很抱歉是否已经提出并回答了这个问题,但我认为我的情况与我一直试图找到的其他答案有所不同。另外,我对C++还是很陌生。 我基本上是想创建一个系统,其中C++程序从游戏中接收数据并将其通过套接字发送
克隆 git-repo 后,当我尝试在提交后将 repo 推送到 git 服务器时。它给出的错误是“在远程端解包过程中发生 ssh 错误:解包对象异常退出” 最佳答案 检查远程仓库的所有权。 我也遇到
解决的问题 需要将数组(list)或元组(tuple)中的元素导出到N个变量中。 解决的方案 任何序列都可以通过简单的变量赋值方式将其元素分配到对应的变量中,唯一的要求就是变量的数量和结构需要
Dim rs, ws, fso, conn, stream, connStr, theFolder
我有这个测试函数,它只是打印传递给它的值 function test1(...) for k, v in ipairs(arg) do print(v) end end func
我有以下宏: #define HEX 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 #define BITS 0x01 #define ADD_FLAGS(a, b,
我正在阅读一个套接字,在所有问题都以为我们发送了错误的信息之后,事实证明阅读存在问题。 这个想法是: 1a- Get 4 bytes, unpack (95). 2a- Get 95 next byt
我有一个返回 Sympy 点的函数: result = [Point3D(500, 500, 10), Point3D(-500, 500, 10), Point3D(-500, -500, 10),
我正在尝试存储在 std::tuple 中不同数量的值,稍后将用作调用与存储类型匹配的函数指针的参数。 我创建了一个简化示例来展示我正在努力解决的问题: #include #include voi
我正在使用 ben strasser C++ 快速 csv 解析器:https://github.com/ben-strasser/fast-cpp-csv-parser .它使用可变参数模板将列值传
我有一个由 3 个字符串组成的打包字符串,这样我就有一个整数,指定下一个项目的字节长度,然后是那个项目的字节,然后是下一个项目的字节大小,等等,就好像有人做了: [a.bytesize, a, b.b
我正在尝试存储在 std::tuple 中不同数量的值,稍后将用作调用与存储类型匹配的函数指针的参数。 我创建了一个简化的示例来展示我正在努力解决的问题: #include #include vo
我正在尝试按照 https://conda.github.io/conda-pack/index.html?highlight=conda%20unpack 中的步骤进行操作打包和解包 conda 环
我是R的新手,可以轻松地重新组织数据,并四处寻找解决方案,但找不到我想要做的事情。 Reshape2的融化/浇铸似乎不太奏效,我还没有很好地掌握plyr,因此无法将其纳入其中。 基本上,我有一个dat
希望标题不要误导。 我像往常一样在 Pandas 数据框中加载一个 Excel 文件 df = pd.read_excel('complete.xlsx') 这就是里面的东西(通常已经订购了 - 这是
这个问题在这里已经有了答案: Lua unpack() messing arguments (1 个回答) 6年前关闭。 有人可以向我解释为什么table.unpack()仅当在 table.unpa
我有一个读取二进制文件然后使用 struct.unpack() 解压文件内容的函数。我的功能工作得很好。如果/当我使用长的“格式”字符串解压缩整个文件时,它会更快。问题是有时字节对齐会发生变化,因此我
我是一名优秀的程序员,十分优秀!