Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python字典是否与Rexx复合变量的数据结构等效?_Python_Rexx_Oorexx - Fatal编程技术网

Python字典是否与Rexx复合变量的数据结构等效?

Python字典是否与Rexx复合变量的数据结构等效?,python,rexx,oorexx,Python,Rexx,Oorexx,我正在将一个冗长的Rexx脚本重写到Python程序中,并试图找出模拟Rexx复合变量功能的最佳方法。字典是最好的选择吗?显然,字典的行为会有所不同,并且不会与复合变量完全相同。我不是Python人,但我知道字典是什么 根据Rexx复合变量的复杂程度,是 a.b …很容易翻译成字典 a.b.c.d.e.f.g.h …不太容易翻译成字典。可能是词典中的词典在词典中的词典在词典中的词典在词典中的词典在词典中的词典在词典中的词典 Rexx-Stem-variable和python字典类似,但有区别。

我正在将一个冗长的Rexx脚本重写到Python程序中,并试图找出模拟Rexx复合变量功能的最佳方法。字典是最好的选择吗?显然,字典的行为会有所不同,并且不会与复合变量完全相同。

我不是Python人,但我知道字典是什么

根据Rexx复合变量的复杂程度,是

a.b

…很容易翻译成字典

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

…不太容易翻译成字典。可能是词典中的词典在词典中的词典在词典中的词典在词典中的词典在词典中的词典在词典中的词典

Rexx-Stem-variable和python字典类似,但有区别。 考虑基于字典创建一个RexxStem

简单词干表达式 可以翻译成python作为

a[b]
a[b + '.' + c + '.' + d]
复合词干表达式 根据我的经验

a.b.c.d
将被翻译成python作为

a[b]
a[b + '.' + c + '.' + d]
试着用当前的解释器运行以下rexx,看看你能做些什么 获取:

在一些rexx解释器中,您会得到“qwerty”。我不确定是否就这些

初始化Stem变量 在rexx中,可以初始化stem变量lic

a. = 'abc'
一些常用的用法是

no = 0
yes = 1

found. = no

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

....

if found.y = yes then do
   ..
end

stem变量的初始值 与所有Rexx变量一样,变量的默认值/初始值,因此a.2.3的默认值为a.2.3。如果您来自另一种语言,这可能看起来很奇怪,但在调试时非常方便-如果变量名意外弹出-->您尚未启动。这也意味着如果不初始化变量,数值表达式会崩溃


这不是您需要实现的东西,只是要注意。

Python字典和Rexx词干都是。他们的行为方式有点不同。Rexx的规则非常简单:

  • 数组引用分为“干”和“尾”,由一个点分隔
  • stem是一个独立于大小写的变量名。这是字典
  • 处理尾部以标识数组的元素。它被拆分为一个或多个点分隔的子字符串。每个子字符串都被视为一个变量:如果有一个变量的名称与大小写无关,则使用它的值而不是它的名称。否则,将使用大写的名称。这条线被重新组合在一起,点和所有的。这是关键
  • 数组可以有一个默认值,由
    stem.=值,该值适用于所有未设置的元素
  • 因此,Python中数组引用
    stem.tailpart1.tailpart2.tailpart3
    的结果是:

    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
    

    我认为这两种情况都可以通过字典a.b==>a[b]和a.b.c==>a[b+'.'c]在pythonth中处理。这很有意义,我现在看到了这两种结构之间的差异,我一定会考虑创建一个类来模拟它!是的,
    a.b.c.d
    将被翻译成Python作为
    a[b+.+c+.+d]
    ,但需要注意的是,如果未设置
    b
    c
    d
    ,它们的值将分别为“b”、“c”和“d”。这对于任何Rexx变量都是正确的。”
    a.2.3='qwerty';zz=2''3;说a.zz
    在一些Rexx解释器中,你会得到'qwerty'。不确定这是否就是全部”-是的,这是正确的Rexx行为。任何Rexx实现都应该产生这样的结果<代码>2.“'3
    表示“连接2、.”和3,并将结果分配给zz”,“a.2.3”表示“命名为“2.3”的元素”,“a.zz”表示“值为zz的命名元素”。“a.2.3的默认值为a.2.3”“-更准确地说,任何简单变量的默认值都是大写的名称,任何复合变量的尾部都是其所有元素作为简单变量的串联,点保持不变,而未设置的复合变量的值是词干的默认值,或者在没有默认设置的情况下,用大写字母连接茎和尾,并保持点的完整性。
    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