Обзор Python различных методов, используемых для применения функции к списку элементов

Я хочу понять следующие результаты следующих методов, используемых в python3.X для выполнения определенных вещей. Рассмотрим следующий код, в котором с использованием разных методов пытается достичь того же результата.

def addSlash(fname):
    if isinstance(fname, str):
        if " " in fname:
            return fname.replace(" ", "\ ")


# example output
a = "ab c"
a = addSlash(a)
print(a)
print()


# list of interest
files = ["spaces file1", "spaces file2", "spaces file3"]

for f in files:
    f = addSlash(f)
    # this prints correct result but list elements are not permanently having the change.
    print(f)

print('\nThis did not change..')
print(files)


print('\nTrying the old way gives 2 slashes as well..')
files = ["spaces file1", "spaces file2", "spaces file3"]
for i in range(0, len(files)):
    files[i] = addSlash(files[i])
print(files)

print('\nTrying this way give as different results, putting 2 slashes instead of one for some reason')
files = ["spaces file1", "spaces file2", "spaces file3"]
files = [addSlash(f) for f in files]
print(files)

print('\nSame with this one, same results as above.')
files = ["spaces file1", "spaces file2", "spaces file3"]
f = list(map(lambda x: x.replace(" ", "\ "), files))
print(f)

Результат вышеизложенного при работе следующий:

ab\ c

spaces\ file1
spaces\ file2
spaces\ file3

This did not change..
['spaces file1', 'spaces file2', 'spaces file3']

Trying the old way gives 2 slashes instead of one!
['spaces\\ file1', 'spaces\\ file2', 'spaces\\ file3']

Trying this way give as different results, putting 2 slashes as well!
['spaces\\ file1', 'spaces\\ file2', 'spaces\\ file3']

Same with this one, same results as above.
['spaces\\ file1', 'spaces\\ file2', 'spaces\\ file3']

Может ли кто-нибудь прокомментировать каждый метод и объяснить, почему он не работает?

Двойные обратные косые черты - это всего лишь разница между печатью строки и просмотром представления строки Python. Последний будет избегать обратной косой черты с помощью другой обратной косой черты. Если вы используете [print(f) for f in files], двойная обратная косая черта волшебным образом исчезнет.

glibdud 13.04.2018 15:05

Кроме того, if "" in fname: не имеет смысла ... все строки содержат пустую строку. Вы имели ввиду if " " in fname:? (Если эта строка странным образом разделилась, я понимаю, что вы хотели поставить пробел между кавычками.)

glibdud 13.04.2018 15:09

Да ты прав в этом, я имел в виду это

hack-is-art 13.04.2018 15:52

На самом деле, этот оператор if на самом деле вообще не нужен. Если в строке нет совпадений, str.replace() просто ничего не сделает.

glibdud 13.04.2018 17:14

Кстати, я не уверен, что полностью понял, будет ли отсутствовать двойная обратная косая черта, когда я использую ее для своего кода, или она будет там

hack-is-art 13.04.2018 17:44

На самом деле его там нет. Python просто добавляет туда лишнюю обратную косую черту, когда вы смотрите на значение объекта в интерпретаторе. Когда вы печатаете или передаете объект в программе, это будет правильно. (Подсказка: как вы думаете, что вернет len('\\')? Попробуйте.)

glibdud 13.04.2018 17:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
26
0

Другие вопросы по теме