我有一个测量文字长度的功能:
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)
答案 0 :(得分:3)
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]