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

1
kbarnum 27 Июн 2019 в 21:49

2 ответа

Лучший ответ

Словари 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
1
Ross Patterson 1 Июл 2019 в 12:20

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

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

a.b

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

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

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

0
cschneid 27 Июн 2019 в 21:35