Как звездочка `*` работает в методе форматирования строки `.format (*)` в Python 3? - PullRequest
0 голосов
/ 24 сентября 2018

Какая польза от * в .format(*)?При использовании его в функции форматирования ниже print(new_string.format(*sum_string)) он изменяет значение sum_string в выходных данных с 18 на 1. Почему это происходит?Я прочитал следующую ссылку о *args и **kwargs, но не мог понять, как это относится к функции .format()

Что означает ** (двойная звезда / звездочка) и *(звездочка / звездочка) сделать для параметров?

sum_string = "18"
new_string = "This is a new string of value {}"

print(new_string.format(sum_string)) #it provides an output of value 18
print(new_string.format(*sum_string)) #it provides an output of value 1

1 Ответ

0 голосов
/ 24 сентября 2018

это не имеет ничего общего с format.* распаковывает аргументы, поэтому, если в вашем списке, скажем, 4 заполнителя и 4 элемента, format распаковывает аргументы и заполняет слоты.Пример:

args = range(4)
print(("{}_"*4).format(*args))

печатает:

0_1_2_3_

Во втором случае:

print(new_string.format(*sum_string))

аргументы для распаковки являются символами изстрока (строка рассматривается как итеративная при распаковке аргумента), и так как есть только один заполнитель, форматируется и печатается только первый символ (и в отличие от предупреждений, которые можно получить с помощью компиляторов C и printf, python нене предупреждаю вас о том, что ваш список аргументов слишком длинный, он просто не использует их все)

С несколькими заполнителями вы могли бы засвидетельствовать это:

>>> args = "abcd"
>>> print("{}_{}_{}_{}").format(*args))
a_b_c_d
...