Формат () со списком переменной длины

#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. Теперь я это вижу. Исправлено, я думаю.