piesam
@piesam
Python developer

Почему функция не работает в классе?

Почему это работает:
def clean(text: str):
    return text \
        .replace('?', '') \
        .replace("|", '') \
        .replace('\"', '') \
        .replace('  ', '') \
        .replace(':', '') \
        .replace('\\', '') \
        .replace('/', '') \
        .replace('>', '') \
        .replace('<', '') \
        .replace('"', '') \
        .replace('+', '') \
        .replace('*', '') \
        .replace(' .', '')
...

class ParseText:

...

    def save_text(self):
        part = open('src/text/{}.txt'.format(clean(partName)), 'w', encoding="utf-8")


А это не работает:
def clean(text: str):
    strings = ['?', "|", '\"', ]
    result = (text.replace(i, "") for i in strings)
    result = str()
    for i in strings:
        print(i)
        result = text.replace(i, '')
        continue
    return result
...

class ParseText:

...

    def save_text(self):
        part = open('src/text/{}.txt'.format(clean(partName)), 'w', encoding="utf-8")
  • Вопрос задан
  • 191 просмотр
Пригласить эксперта
Ответы на вопрос 1
@MechanicZelenyy
Потому что строки неизменны, метод replace не может изменить исходную строку (как и любой другой метод) и он возвращает новую строку в которой все заменено. В первом случае, каждый последующий вызов действует на строку возвращенную предыдущем и в итоге возвращает правильный результат.
А еще ненужно в конце цикла писать continue, оно и так перейдет. И обнулять переменную с помощью конструкций = str()

Пример:
In [4]: a = "abc"

In [5]: b = a.replace("a", "1")

In [6]: print(a,b)
abc 1bc
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы