Итак, я читал этот wonderful piece, который пытается объяснить декораторы в python.Объем переменной при передаче другой функции в декораторах python
Мой вопрос относится только к этому фрагменту кода.
def surround_with(surrounding):
"""Return a function that takes a single argument and."""
def surround_with_value(word):
return '{}{}{}'.format(surrounding, word, surrounding)
return surround_with_value
def transform_words(content, targets, transform):
"""Return a string based on *content* but with each occurrence
of words in *targets* replaced with
the result of applying *transform* to it."""
result = ''
for word in content.split():
if word in targets:
result += ' {}'.format(transform(word))
else:
result += ' {}'.format(word)
return result
markdown_string = 'My name is Jeff Knupp and I like Python but I do not own a Python'
markdown_string_italicized = transform_words(markdown_string, ['Python', 'Jeff'],
surround_with('*'))
print(markdown_string_italicized)
То, что я не понимаю, каким образом функция surround_with()
получить переменную word
(когда передается от transform(word)
внутри transform_words()
) в его область действия? Я имею в виду, что мы объявили только удерживающую переменную (как аргумент функции) для того, что должно быть для окружающей среды, и ничего больше. Тогда как это было word
?
Что мне здесь не хватает?
Обратите внимание, что внутри 'transform_words' функция' surround_with_value' ** является ** 'transform'. Поэтому, когда мы называем 'transform (word)', мы на самом деле вызываем 'surround_with_value (word)', потому что эти два имени относятся к одной и той же функции * (не совсем, на самом деле, поскольку 'surround_with_value' выходит за рамки, когда' surround_with 'заканчивается, но это самый простой способ подумать об этом) *. – jonrsharpe
@jonrsharpe Это имеет смысл, я отправил ответ, основанный на моем понимании, вы можете проверить его правильность? –