【问题标题】:How to pass additional parameters to python callback?如何将附加参数传递给python回调?
【发布时间】:2017-05-10 16:07:47
【问题描述】:

我有以下示例代码块,我正在尝试将文本从一种语言翻译成另一种语言。我需要能够传入一个附加参数,该参数代表我要翻译成的目标语言。

如何在boltons.iterutils.remap 的回调中向参数列表中添加另一个参数?

我想也许在remap 调用中使用**kwargs 会起作用,但它不起作用。它引发了一个 TypeError:

raise TypeError('unexpected keyword arguments: %r' % kwargs.keys())

任何帮助将不胜感激。

import json
from boltons.iterutils import remap

def visit(path, key, value, lang='es'):
    if value is None or value == '' or not isinstance(value, str):
        return key, value
    return key, '{}:{}'.format(lang, value)

if __name__ == '__main__':
    test_dict = { 'a': 'This is text', 'b': { 'c': 'This is more text', 'd': 'Another string' }, 'e': [ 'String A', 'String B', 'String C' ], 'f': 13, 'g': True, 'h': 34.4}
    print(remap(test_dict, visit=visit, lang='ru'))

【问题讨论】:

  • 这个boltons.iterutils.remap 是否有额外的参数传递给回调?

标签: python python-3.x


【解决方案1】:

显然boltons.iterutils.remap 没有将额外的关键字参数传递给它的回调——而且人们真的没想到它会这样做。所以,你不能直接打电话给visit。但是,您可以调用一个不同的函数来为您填充值。这是lambda 的一个很好的用例。

import json
from boltons.iterutils import remap

def visit(path, key, value, lang='es'):
    if value is None or value == '' or not isinstance(value, str):
        return key, value
    return key, '{}:{}'.format(lang, value)

if __name__ == '__main__':
    test_dict = { 'a': 'This is text', 'b': { 'c': 'This is more text', 'd': 'Another string' }, 'e': [ 'String A', 'String B', 'String C' ], 'f': 13, 'g': True, 'h': 34.4}
    print(remap(test_dict, visit=lambda key, value: visit(key, value, lang='ru')))

【讨论】:

  • 好主意。我还在学习何时应用 lambda 函数,所以我没有想到。
  • 您可以使用常规函数 def foo(key, value): return visit(key, value, lang='ru') 执行相同的操作 - 这只是 lambda 适合并且您不必考虑函数名称的情况之一。跨度>
猜你喜欢
  • 2012-03-23
  • 2014-06-14
  • 2011-06-29
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 1970-01-01
相关资源
最近更新 更多