переменная как ключ массива Python, но без инициализации или объявления - PullRequest
0 голосов
/ 09 мая 2019

О

в коде Python, который я видел на этом сайте

https://amaral.northwestern.edu/blog/function-wrapper-and-python-decorator

Код

def my_add(m1, p1=0):
  output_dict = {}
  output_dict['r1'] = m1+p1
  return output_dic

def my_deduct(m1, p1=0):
  output_dict = {}
  output_dict['r1'] = m1-p1
  return output_dic

Мое сомнение , код

output_dict['r1'] = m1+p1

означает, что m1 + p1 хранится в массиве переменных output_dict в ключе r1. но «r1» не инициализируется и даже не объявляется, прежде чем используется в качестве ключа. разве Python не выдаст ошибку? .

если r1 - переменная, она статическая или имеет область действия в программе?

Ответы [ 3 ]

1 голос
/ 09 мая 2019

Нет, python не выдаст ошибку, вместо этого он автоматически создаст ключ в output_dict со значением, присвоенным ему

0 голосов
/ 09 мая 2019

"r1" - это просто строковый литерал, например "hello" или "hi", и output_dict['r1'] = m1+p1 делает то, что создает ключ r1 в output_dict, а затем присваивает m1+p1 это все в одном выражении

Более простой пример:

In [42]: dct = {}                                                                                                              

In [43]: dct['a']='b'                                                                                                          

In [44]: dct                                                                                                                   
Out[44]: {'a': 'b'}

In [45]: dct['c']='d'                                                                                                          

In [46]: dct                                                                                                                   
Out[46]: {'a': 'b', 'c': 'd'}

Здесь вы видите, что после создания словаря dct я назначил пару ключ-значение a,b, а затем c,d

0 голосов
/ 09 мая 2019

'r1' - это просто строка, ее не нужно инициализировать или объявлять.

А output_dict['r1'] = m1 + p1 означает:

if 'r1' in output_dict:
    # change output_dict['r1'] to m1 + p1
else:
    # create a 'r1' key in output_dict, 
    # and assign value `m1 + p1` to it
...