我使用名为filter_json
的函数将一个数组映射到另一个数组:
filtered_json = map(filter_json, data_json)
def filter_json(data_json):
"""Filter data_json to data that is needed"""
...
# return mapped dictionary
现在我希望filter_json
函数接受另一个参数。像这样的东西(但这显然不起作用):
filtered_json = map(filter_json, data_json, var)
def filter_json(data_json, var):
"""Filter data_json to data that is needed"""
... # do something with var
# return mapped dictionary
如何将更多变量传入filter_json
?
答案 0 :(得分:3)
两种可能的方法:
使用functools.partial
import functools
f = functools.partial(filter_json, var=var)
filtered_json = map(f, data_json)
...或使用列表理解而不是map
:
filtered_json = [ filter_json(x, var) for x in data_json ]
如果你想要一个懒惰评估的迭代器而不是list
,使用圆括号而不是方括号 - 那么它被称为生成器表达式而不是列表推导。
我通常更喜欢选项2,基于可读性,以及在迭代中包含if
条件和嵌套循环的灵活性。
答案 1 :(得分:2)
您可以使用lambda来调用具有您想要的变量的函数
filtered_json = map(lambda data: filter_json(data, var), data_json)
def filter_json(data_json, var):
"""Filter data_json to data that is needed"""
... # do something with var
# return mapped dictionary