У меня есть концептуальный вопрос. Я пытался избавиться от знаков препинания в строке, поэтому я написал следующую функцию:Как работает str.replace?
def nopunc(str):
for x in string.punctuation:
str = str.replace(x, " ")
return str
Это работало. Однако, когда я немного изменил функцию:
def nopunc(str):
for x in string.punctuation:
str1 = str.replace(x, " ")
return str1
это не сработало. Вместо того, чтобы иметь str = str.replace(x, "")
, я дал строке новое имя под названием str1
. Почему это вызовет проблему? Это имеет какое-то отношение к .replace
?
Хорошо подумайте об этом - когда вы переходите ко второму 'x', что такое' str'? (Кроме того, не используйте 'str' в качестве собственного имени переменной.) – jonrsharpe
В сторону: не называйте вашу переменную' str', как это тени Python 'str' и, вероятно, путают читателей вашего кода. –
Ваше замешательство не связано с природой 'replace'. Скорее, речь идет о характере ассимиляции в Python. Прочитайте [Факты и мифы о именах и достоинствах Python] Ned Batchelder (http://nedbatchelder.com/text/names.html), и вы поймете Python намного лучше. –