Будет ли словарь Python структурой данных, эквивалентной составной переменной Rexx? - PullRequest
0 голосов
/ 27 июня 2019

Я работаю над переписыванием длинного скрипта Rexx в программу на Python и пытаюсь найти лучший способ эмулировать функциональность составной переменной Rexx. Был бы словарь лучшим выбором? Очевидно, словарь будет вести себя по-другому и не будет точно таким же, как составная переменная.

Ответы [ 3 ]

1 голос
/ 28 июня 2019

Rexx-Stem переменная и python-словари похожи, но есть различия. Заявитель создает RexxStem класс на основе словаря

Простые выражения ствола

a.b

можно перевести на python как

a[b]

Сложные выражения основы

Из моего опыта

a.b.c.d

будет переведено на python как

a[b + '.' + c + '.' + d]

Попробуйте запустить следующий rexx с вашим текущим переводчиком и посмотрите, что вы получить:

  a.2.3 = 'qwerty'

  zz = 2'.'3
  say a.zz

в некоторых переводчиках rexx вы получите qwerty. Не уверен, что это все

Инициализация переменных основы

в rexx вы можете инициализировать переменную ствола lic

a. = 'abc'

Некоторые общие применения

no = 0
yes = 1

found. = no

if ... then do
   found.v = yes
end

....

if found.y = yes then do
   ..
end

или

counts. = 0

do while ...
   if ... then do
       counts.v = counts.v + 1;
   end
end

Начальное значение переменной ствола

Как и все переменные Rexx, значение по умолчанию / начальное значение переменной, поэтому значение по умолчанию a.2.3 равно A.2.3 . Если вы пришли с другого языка, это может показаться странным, но это может быть очень удобно при отладке - если неожиданно всплывает имя переменной -> вы не инициировали. Это также означает сбой числового выражения, если вы не инициализируете переменную.

Это не то, что вам нужно реализовать, просто имейте в виду.

1 голос
/ 28 июня 2019

Словари Python и основы Rexx являются ассоциативными массивами .Они немного отличаются в том, как они себя ведут.Правила Rexx очень просты:

  1. Ссылка на массив разбивается на "стержень" и "хвост", разделенные одной точкой.
  2. Основа - это имя переменной,случай-независимо друг от друг.Это словарь.
  3. Хвост обрабатывается для идентификации элемента массива.Он разбивается на одну или несколько разделенных точками подстрок.Каждая подстрока обрабатывается как переменная: если есть переменная с этим именем, не зависящим от регистра, вместо ее имени используется ее значение.В противном случае имя пишется в верхнем регистре и используется.Строка собрана вместе, точки и все.Это ключ.
  4. Массив может иметь значение по умолчанию, установленное stem. = value, которое применяется ко всем неустановленным элементам.

Итак, результат ссылки на массивstem.tailpart1.tailpart2.tailpart3 в Python это:

def evaluate_tail(tail, outer_locals):
   result = []
   for element in tail.split('.'):
      if element in outer_locals:
         result.append(str(outer_locals[element]))
      else:
         result.append(str(element).upper())
   return '.'.join(result)

array_default_value = 4
stem = {'A.B.C': 1, 'A.9.C': 2, 'A..q': 3}
b = 9
d = 'q'

tail1 = 'a.b.c'
tail2 = 'a..b'
tail3 = 'a..d'

stem.get(evaluate_tail(tail1,locals()), array_default_value) # 'stem.a.b.c' >>> stem['A.9.C'] >>> 2
stem.get(evaluate_tail(tail2,locals()), array_default_value) # 'stem.a..b' >>> stem['A..9'] (not found) >>> (default value) >>> 4
stem.get(evaluate_tail(tail3,locals()), array_default_value) # 'stem.a..d' >>> stem['A..q'] >>> 3
0 голосов
/ 28 июня 2019

Я не питон, но знаю, что такое словарь.

В зависимости от сложности составной переменной Rexx, да.

a.b

... легко переводится в словарь.

a.b.c.d.e.f.g.h

... менее легко переводить в словарь. Возможно, словарь в словаре в словаре в словаре в словаре в словаре в словаре.

...