美好的一天
我的目标是创建一个接受文本data
的函数,该文本为字符串,并将其转换为小写字母。我希望稍后再通过传递数据来应用该功能。
但是,当我调用/应用该函数并尝试在其中传递数据时,我一直输出此错误。
TypeError:“生成器”对象不可调用
我做了进一步的研究,我只是想知道映射是否引起了这个问题?
是否有任何方法可以使此功能以最有效的方式工作。
以下是我的代码:
def preprocess_text(text):
""" The function takes a parameter which is a string.
The function should then return the processed text
"""
# Iterating over each case in the data and lower casing the text
edit_text = ''.join(map(((t.lower().strip()) for t in text), text))
return edit_text
然后测试功能是否有效:
# test function by passing in data.
""" This is when then the error occurs!"""
text_processed = preprocess_text(data)
我非常感谢您提供帮助,以帮助您了解问题所在以及正确的解决方法。 提前加油!
答案 0 :(得分:2)
该错误出在您的map函数中,我认为您不了解它如何正常工作。它有2个参数:
function_to_apply
:接收可迭代的每个元素并返回一个值。
list_of_inputs
:数据列表(示例中为您的文本)您的第一个参数不是函数,只是一个列表,因此可以通过以下方式更改它:
''.join(map(lambda t: t.lower().strip(), text))
匿名lambda函数的参数t与for t in text
中的每个文本相对应。希望该示例阐明其工作原理!
答案 1 :(得分:1)
您执行的map函数似乎有点错误。根据文档,它应该是:
map(callable, iterable)
但是要传递一个生成器表达式,而不是调用它:
(t.lower().strip()) for t in text)
由于列表理解。 Map将函数(可调用)作为第一个参数。因此,您可以使用:
def preprocess_text(text):
edit_text = ''.join(map(lambda t: t.lower().strip(), text))
return edit_text