Как заменить {} внутри строки словарями

#python

#python

Вопрос:

  num= {1:'a',2: 'z'}

 a='{} is {}'.format(num[1],num[2])
 num[1] = "hello"
 

Могу ли я узнать, почему переменная ‘a’ по-прежнему совпадает со старой, хотя я заменил ее другими словами, используя срез num[1] ?

 print(a)
 >>>
 a is z


num
>>>
{1: 'hello', 2: 'z'}
 

Комментарии:

1. Потому a что был создан с предыдущими значениями в num . num[1] является мгновенным, это не ссылка на то 1 num , на что может измениться значение th в в любой момент времени, и строки в любом случае неизменяемы.

2. num[1] = "hello" должно быть, перед форматированием строки

3. Поскольку вы никогда не меняли переменную a после того, как впервые определили ее, почему вы ожидали, что она изменится ? a не имеет внутренней связи с num

Ответ №1:

Причина этого в том, что вы определили a перед изменением своего словаря, порядок вашего кода в python важен.

  num= {1:'a',2: 'z'}

 a='{} is {}'.format(num[1],num[2])
 num[1] = "hello"

print(a) 
 

a — это z

против

 num= {1:'a',2: 'z'}
num[1] = "hello"

a='{} is {}'.format(num[1],num[2])

print(a)
 

привет, это z

Ответ №2:

Присвоение переменной a создает статическую строку на основе значений num[1] и num[2] в этой точке последовательности выполнения. Последующее обновление словаря не восстанавливает значение a .

Если вы хотите a изменить содержимое словаря, вам нужно сделать его исполняемой функцией или лямбдой, чтобы он переоценивался каждый раз, когда вы его используете:

 num= {1:'a',2: 'z'}

def a(): return '{} is {}'.format(num[1],num[2])

print(a()) # a is z

num[1] = "hello"

print(a()) # hello is z