#python #string #list
#python #строка #Список
Вопрос:
Я пытаюсь понять функцию format () в python при выполнении задачи codewars. Мое решение было намного менее элегантным, поскольку я использовал операторы if для вставки форматирования номера телефона в определенные позиции.
Лучший ответ был:
def create_phone_number(n):
return "({}{}{}) {}{}{}-{}{}{}{}".format(*n)
Я понимаю, что format() заменит каждую фигурную скобку на то, что вы вводите в качестве параметра, а длина списка не может быть меньше количества фигурных скобок. Как функция format() знает, что нужно проходить по списку в каждой позиции, начиная с n[0], и заменять пустые фигурные скобки, когда в строку, которую она форматирует, не вводится переменная?
Комментарии:
1. Он ничего не знает.
*n
распаковывает список / кортеж до нескольких аргументов для.format()
функции, а пустой{}
просто означает, что «напечатать следующий аргумент».2. @z3ke ваш вопрос: «что происходит, когда вы предоставляете * n длиной менее 10?
Ответ №1:
*
перед n для распаковки. Это означает, что он преобразуется в список аргументов. В случае строки "1234"
она распаковывается до ее символов '1','2','3','4'
Если все фигурные скобки пусты, они неявно заполняются индексированными.
So "({}{}{}) {}{}{}-{}{}{}{}".format(*n)
эквивалентно "({0}{1}{2}) {3}{4}{5}-{6}{7}{8}{9}".format(*n)
Индексированные фигурные скобки заменяются соответствующим аргументом метода format . Это означает, что если вы вручную добавите индексы в фигурные скобки, вы можете изменить порядок, в котором аргументы должны отображаться в строке, и даже вставить один и тот же аргумент несколько раз.
Вы можете прочитать больше в документации по синтаксису строки формата
Комментарии:
1. Это не то, что спрашивает OP.
2. Теперь я это вижу. Исправлено, я думаю.