В Python мы называем это пониманием списка. Существуют и другие сообщения stackoverflow, которые подробно освещали эту c эту тему, например: Что означает «понимание списка»? Как это работает и как я могу его использовать? и Объяснение того, как работает понимание вложенных списков? .
В вашем примере код не завершен, поэтому его трудно понять что такое «алфавит» или «открытый текст». Тем не менее, давайте попробуем разбить то, что он делает на высоком уровне.
"".join([alphabet[(alphabet.index(i)+k)] for i in plaintext.lower()])
Может быть разбито как:
"".join( # The join method will stitch all the elements from the container (list) together
[
alphabet[alphabet.index(i) + k] # alphabet seems to be a list, that we index increasingly by k
for i in plaintext.lower()
# we loop through each element in plaintext.lower() (notice the i is used in the alphabet[alphabet.index(i) + k])
]
)
Обратите внимание, что мы можем переписать для понимания в качестве фор-л oop. Я создал похожий пример, который, надеюсь, может лучше прояснить ситуацию:
alphabet = ['a', 'b', 'c']
some_list = []
for i in "ABC".lower():
some_list.append(alphabet[alphabet.index(i)]) # 1 as a dummy variable
bringing_alphabet_back = "".join(some_list)
print(bringing_alphabet_back) # abc
И, наконец, return
просто возвращает результат. Это аналогично возврату всего результатаring_alphabet_back.