我有以下问题:我想提供一个简单的函数,它可以迭代一组参数,并对所有集合执行相同的操作。这个想法是将标量值或任何可迭代对象作为 kwarg 传递给函数,然后生成每个 kwarg 集合,然后在其中调用操作。
def simple_function(**kwargs):
list_of_kwargs = convert_kwargs(kwargs)
return [my_action(**kwargs_set) for kwargs_set in list_of_kwargs]
所以,考虑到这一点,我觉得实现高效和通用的convert_kwargs
很困难。一些需要满足的示例测试用例:
class ConvertParamsTestCase(unittest.TestCase):
def test_convert_kwargs_no_list(self):
kwargs = {'arg1': 1, 'arg2': "string", 'arg3': None}
self.assertDictEqual(kwargs, convert_kwargs(kwargs))
def test_convert_kwargs_all_lists(self):
kwargs = {'arg1': [1, 2], 'arg2': ["string", "str"], 'arg3': [None, None]}
expected = [{'arg1': 1, 'arg2': "string", 'arg3': None}, {'arg1': 2, 'arg2': "str", 'arg3': None}]
self.assertListEqual(expected, convert_kwargs(kwargs))
def test_convert_kwargs_one_is_string(self):
kwargs = {'arg1': [1, 2], 'arg2': "string", 'arg3': [None, None]}
expected = [{'arg1': 1, 'arg2': "string", 'arg3': None}, {'arg1': 2, 'arg2': "string", 'arg3': None}]
self.assertListEqual(expected, convert_kwargs(kwargs))
def test_convert_kwargs_one_is_iterator(self):
kwargs = {'arg1': range(1, 3), 'arg2': "string", 'arg3': [None, None]}
expected = [{'arg1': 1, 'arg2': "string", 'arg3': None}, {'arg1': 2, 'arg2': "string", 'arg3': None}]
self.assertListEqual(expected, convert_kwargs(kwargs))
我已经检查过,但没有成功: 列表字典转换为字典列表 我的主要问题是:
- 字符串是可迭代的
- 我不能通过对生成器进行求值来检查其长度