我想使用functools.partial
将某个参数设置为常量,同时将该参数全部删除。在
让我用一个简单的例子来解释。在
from functools import partial
def f(a, b):
return a * b
g = partial(f, b=2)
但是,此函数g
仍然具有以下调用签名:
我当然可以用一个lambda函数来做这个,比如:
def f(a, b):
return a * b
g = lambda a: f(a, b=2)
具有正确的主叫签名:
g?
Signature: g(a)
Docstring: <no docstring>
File: ~/Work/<ipython-input-7-fc5f3f492590>
Type: function
使用lamdba
函数的缺点是我需要再次写下所有参数。在我的简单示例中,这无关紧要,但请看以下内容:
phase_func = lambda site1, site2, B_x, B_y, B_z, orbital, e, hbar: \
phase_func(site1, site2, B_x, B_y, B_z, orbital, e, hbar, xyz_offset=(0,0,0))
# or this
phase_func = partial(phase_func, xyz_offset=(0,0,0)
在后面的代码中,我使用包装器,它可以通过乘以其他两个函数来生成一个新函数,比如combine(function1, function2, operator.mul)
。这个combine
函数查看所有参数,因此我需要在设置参数后删除它。在
目前没有回答
相关问题 更多 >
编程相关推荐