Что происходит за кулисами в "" .join (e [0] для e во фразе .split ())? - PullRequest
0 голосов
/ 06 ноября 2019

Я новичок, пытающийся изучать Python, когда у меня ограниченный опыт работы с Java, поэтому потерпите меня здесь.

Я могу выделить, какова цель каждой части кода. Я понимаю, что мы объединяем по существу первый символ каждого слова в фразе в строку, в результате чего получается аббревиатура. Я понимаю, что нам нужно разобрать фразу в список слов, и что для каждого слова мы можем выдвинуть первый символ, и что нам нужен цикл для этого. Хорошо, имеет смысл.

Но какого чёрта? Мы передаем цикл for в функцию join? И как здесь работает e [0], когда он синтаксически не является частью цикла for, что я вижу?

Я думаю, возможно, синтаксис бросает меня за петлю (простите за каламбур).

1 Ответ

5 голосов
/ 06 ноября 2019

Это выражение генератора . Это похоже на понимание списка , за исключением того, что оно использует () вместо [] и вычисляет генератор вместо списка. Он также может использовать существующие (), подобно тем, которые использовались для вызова join.

"".join(e[0] for e in phrase.split())

По существу эквивалентно:

"".join([e[0] for e in phrase.split()])  # A list comprehension

Или, изложенным полностью, используятипичная for петля:

chars = []

for e in phrase.split():
    chars.append(e[0])

"".join(chars)
...