Ошибка типа: объект «генератор» не может быть вызван.При попытке перебрать строковые данные - PullRequest
0 голосов
/ 28 февраля 2019

Добрый день,

Моя цель - создать функцию, взять текст 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) 

Я был бы очень признателен за помощь, чтобы узнать, чтоВопрос заключается в том, чтобы узнать правильный способ сделать это.Ура заранее!

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Ошибка в вашей функции карты, я думаю, вы не поняли, как она работает должным образом.Он имеет 2 аргумента:

  • function_to_apply: получает каждый элемент итерируемого и возвращает значение.
  • list_of_inputs: список ваших данных (ваш текст в примере)

Ваш первый аргумент не является функцией, это просто список, поэтому измените его следующим образом:

''.join(map(lambda t: t.lower().strip(), text))

Параметр t анонимной лямбда-функции соответствует каждому фрагментутекста, как у вас было бы в for t in text.Надеюсь, этот пример прояснил, как это работает!

0 голосов
/ 28 февраля 2019

Ваше выполнение функции карты кажется немного неправильным.Согласно документации это должно быть:

map(callable, iterable)

Но вместо вызова вы передаете выражение генератора:

(t.lower().strip()) for t in text)

в результате понимания списка.Карта принимает функцию (вызываемый) в качестве первого аргумента.Итак, вы можете использовать:

def preprocess_text(text):
edit_text = ''.join(map(lambda t: t.lower().strip(), text))
return edit_text
...