作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从库中有两种以相同方式工作的方法。不同之处在于,它需要一个附加的可选参数。例如:
def method1(a, b, c):
...
def method2(a, b, c, d=None):
...
我必须对这些方法的结果执行相同的任务,因此我有一个将它们组合起来的方法,如下所示:
def wrapper(method, a, b, c, d=None):
...
if d:
results = method(a, b, c, d=d)
else:
results = method(a, b, c)
...
这可行,但是当我添加更多具有不同可选参数的方法时,它变得很麻烦。有没有更好的方法来处理这些参数?
最佳答案
这里有一些代码可以实现您正在寻找的内容。
您可以将方法集合传递到 wrapper
中,该函数将返回任何将关键字参数映射到 kwargs
的方法的值。
def method1(a, b, c):
return a, b, c
def method2(a, b, c, d=None):
return a, b, c, d
methods = (
method1,
method2,
) # Collection of methods to run.
def wrapper(kwargs, methods=methods):
"""Loop over methods with kwargs."""
for method in methods:
try: # Call method with **kwargs
return method(**kwargs) # Return value if keys in kwargs fit signature of method.
except TypeError as err: # Handle error if keyword args don't match.
print(f'err "{err}" for method "{method}')
kwargs_collection = (dict(zip(args, (f'value for arg: "{arg}"' for arg in args)))
for args in ('abcd', 'abc', ))
for test_kwargs in kwargs_collection:
print(wrapper(test_kwargs))
输出:
err "method1() got an unexpected keyword argument 'd'" for method "function method1 at 0x7f900c2b7d90"
('value for arg: "a"', 'value for arg: "b"', 'value for arg: "c"', 'value for arg: "d"')
('value for arg: "a"', 'value for arg: "b"', 'value for arg: "c"')
关于python - 将方法作为带有可选参数的参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53230895/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!