使用带有附加参数的map - python

时间:2014-08-10 06:43:25

标签: python list python-2.7 map typeerror

我有一个测量文字长度的功能:

def length(text, option='char'):
  if option == 'char':
    return len(text) - text.count(' ')
  elif option == 'token':
    return text.count(' ') + 1

我可以获得字符文本长度:

texts = ['this is good', 'foo bar sentence', 'hello world']
text_lens = map(length, texts)
print text_lens

但是当我使用map时如何指定函数中的第二个参数?

以下代码:

texts = ['this is good', 'foo bar sentence', 'hello world']
text_lens = map(length(option='token'), texts)
print text_lens

给出了这个错误:

TypeError: length() takes at least 1 argument (1 given)

3 个答案:

答案 0 :(得分:3)

使用functools.partial

text_lens = map(functools.partial(length, option='token'), texts)

答案 1 :(得分:2)

或者,您可以使用lambda

text_lens = map(lambda x: length(x, 'token'), texts)

text_lens = map(lambda x: length(x, option='token'), texts)

答案 2 :(得分:2)

在大多数情况下,列表理解/生成器优于map。它提供了地图的所有功能,并增加了一些功能。

text_lens = [length(item, option="token") for item in texts]