python - 如何在带有 *args 和 **kwargs 的函数调用中使用默认参数?
问题描述
我有以下简单的示例代码:
def wrapper(foo, para1=1, *args):
print("para1: "+ str(para1))
print(foo(*args))
def foo1(x):
return 2*x
wrapper(foo1, 2, 3)
我在其中定义了一个函数,该函数wrapper
具有一个para1
带有默认值的参数1
。
但是为了foo1
正确调用带有函数的包装器,我必须一直设置para1
,因为我必须将额外的参数传递给foo1
. 这意味着默认值para1=1
没有任何意义,因为无论如何我必须一直定义它。
或者是否有其他方法来定义函数,这样我就可以轻松使用这个默认值,而不必一直定义它?
例如,
wrapper(foo1, *args=(3,))
wrapper(foo=foo1, args=(3,))
不工作...
用例示例:
def wrapper(foo, timeout=10, *args):
time0 = time.time()
while time0 < time.time() + timeout:
if foo(*args):
return True
time.sleep(1)
raise SomeTimeout Exception
解决方案
怎么弄成这样?
#/usr/bin/env python3
def f1(f, *args, **kwargs):
if not 'b' in kwargs:
kwargs['b'] = 1
print('b =',kwargs['b'])
f(args)
def fx(args):
print(args)
f1(fx, 3, 4)
print()
f1(fx, 3, 4, b=2)
输出:
b = 1
(3, 4)
b = 2
(3, 4)
推荐阅读
- git - 同步 2 个具有不同历史的存储库
- c# - 使用 Roslyn Formatter 在条件中添加换行符
- windows-iot-core-10 - 在 Win10 IoT Core 上安装 Azure IoT Edge 导致启动失败
- sql - 如何将 DataGrip SQL 格式化程序与复合 WHERE 子句一起使用
- python - tensorflow 使用占位符与 tf.convert_to_tensor() 将 numpy 数组传递给图形
- typescript - 在辅助函数和异步等待中拆分云函数
- javascript - 是否有 rangeselector 事件来获取数据范围之外的日期?
- vbscript - CDO.Message 适用于 VBS 但不适用于 ASP
- pouchdb - 多个数据库或类型字段
- javascript - 根据url添加span类